【学习笔记】IOC创建对象的方式
spring创建对象是通过构造方法来创建的
-
无参构造【默认】
证明:
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(); }
从结果可以发现,无参构造中的内容也被打印了出来,所以证明spring默认是通过无参构造来创建对象的。
我们都知道,一个类中如果定义了有参构造,在想使用无参构造就必须显示定义,这里我们不去定义无参构造,只定义有参构造,看看会发生什么?
得到的结果是在配置文件中,找不到要创建的类,原因就是没有定义无参构造
-
如果我们想通过有参构造来创建对象,有三种方式
都是使用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>
-
创建对象的时间:加载完配置文件后