【学习笔记】IOC创建对象的方式

IOC创建对象的方式

spring创建对象是通过构造方法来创建的

  1. 无参构造【默认】

    证明:

    package pojo;
    ​
    public class User {
        private String name;
    ​
        public User() {
            System.out.println("User被创建了!");
        }
    ​
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
    ​
        public void show(){
            System.out.println("name:"+name);
        }
    ​
    }
    <bean id="User" class="pojo.User">
        <property name="name" value="张三"/>
    </bean>
    public void test01(){
       ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean("User");
        user.show();
    }

    image-20230211155511225

    从结果可以发现,无参构造中的内容也被打印了出来,所以证明spring默认是通过无参构造来创建对象的。

我们都知道,一个类中如果定义了有参构造,在想使用无参构造就必须显示定义,这里我们不去定义无参构造,只定义有参构造,看看会发生什么?

image-20230211155834298

得到的结果是在配置文件中,找不到要创建的类,原因就是没有定义无参构造

 

  1. 如果我们想通过有参构造来创建对象,有三种方式

    都是使用constructor-arg 标签来为有参构造的参数赋值

    • 直接通过属性名

      <bean id="User" class="pojo.User">
          <constructor-arg name="name" value="张三"/>
      </bean>
    • 通过参数的索引

      <bean id="User" class="pojo.User">
         <constructor-arg index="0" value="李四"/>
      </bean>
    • 通过参数的类型

      <bean id="User" class="pojo.User">
         <constructor-arg type="java.lang.String" value="王五"/>
      </bean>

 

 

创建对象的时间:加载完配置文件后

在配置文件加载时,容器中管理的对象就已经初始化了

posted @ 2023-02-11 16:15  GrowthRoad  阅读(21)  评论(0编辑  收藏  举报