IOC创建对象的方式

通过无参构造创建

  1. 编写实体类

    public class User {
        private String name;
    
        public User() {
            System.out.println("User的无参构造");
        }
    
        public void show(){
            System.out.println("你好:" + this.name);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
  2. 编写applicationContext.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="user" class="com.jh.domain.User">
            <property name="name" value="Spring"/>
        </bean>
    </beans>
    
  3. 测试

    @Test
    public void test01() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //在执行getBean之前, User对象就已经被Spring容器通过无参构造创建了
        User user = (User) context.getBean("user");
        user.show();
    }
    

通过有参构造创建

  1. 编写实体类

    public class User {
        private String name;
    
        public User(String name) {
            System.out.println("User的带参构造");
        }
    
        public void show(){
            System.out.println("你好:" + this.name);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
  2. 编写applicationContext.xml文件

    通过构造器注入参数有三种方式

    1. 通过index参数下标注入

      <bean id="user" class="com.jh.domain.User">
          <!-- index指构造方法 , 下标从0开始 -->
          <constructor-arg index="0" value="姓名"/>
      </bean>
      
    2. 通过参数类型注入,不推荐!

      <bean id="user" class="com.jh.domain.User">
          <constructor-arg type="java.lang.String" value="姓名"/>
      </bean>
      
    3. 通过参数名注入

      <bean id="user" class="com.jh.domain.User">
          <!-- name指参数名 -->
          <constructor-arg name="name" value="姓名"/>
      </bean>
      
  3. 测试

    @Test
    public void test01() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
    

我们发现,即使没通过getBean获取容器的对象,User也被创建了。

总结:在配置文件加载的时候。其中管理的对象都已经初始化了

posted @ 2021-01-18 17:02  天下御免  阅读(62)  评论(0编辑  收藏  举报