IOC创建对象的方式
使用无参构造
在一般情况下我们我们使用spring创建对象的方式都是使用无参构造
验证:
-
创建User类
public class User { private String name; public User() { System.out.println("这是User的无参构造器"); } public User(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
注入Baen
<bean id="user" class="com.fan.ioc.dao.User"> <property name="name" value="user"/> </bean>
-
使用spring创实例化Bean
@Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = context.getBean("user", User.class); }
结果显示
在实例化bean时通过了User类的无参构造方法,所以spring创建对象的方法为无参构造。
那么如果我们想使用有参构造来进行实例化bean该如何操作呢?
使用有参构造
使用下标
<bean id="user" class="com.fan.ioc.dao.User" >
<constructor-arg index="0" value="有参构造的第一个参数"/>
<constructor-arg index="1" value="10"/>
</bean>
使用参数类型
<bean id="user" class="com.fan.ioc.dao.User" >
<constructor-arg type="java.lang.String" value="使用参数类型进行匹配"/>
<constructor-arg type="int" value="10"/>
</bean>
使用参数名(最常使用)
<bean id="user" class="com.fan.ioc.dao.User" >
<constructor-arg name="name" value="fan"/>
<constructor-arg name="age" value="10"/>
</bean>
总结:在配置文件加载的时候,容器中管理的Bean就已经被初始化了。也可以理解为Bean被注册的时候就已经被实例化了。