1.使用无参构造,默认方式。
public class User {
private String str;
public User(){
System.out.println("无参构造");
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "User{" +
"str='" + str + '\'' +
'}';
}
}
<bean id="user" class="com.yf.pojo.User">
<property name="str" value="yf"/>
</bean>
测试:
public class Mytest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
}
}
输出:无参构造
说明在加载配置文件beans.xml的时候对象已经创建,后面的
User user = (User) context.getBean("user");
的方法只是把创建的对象拿过来用罢了。
2.有参构造
public User(String str){
this.str = str;
}
(1)index
<bean id="user" class="com.yf.pojo.User">
<constructor-arg index="0" value="YF"/>
</bean>
(2)type不建议使用:如果有两个一样的类型就没有办法了
<bean id="user" class="com.yf.pojo.User">
<constructor-arg type="java.lang.String" value="yfyf"/>
</bean>
(3)直接通过参数名
<bean id="user" class="com.yf.pojo.User">
<constructor-arg name="str" value="yfyfyf"/>
</bean>
如果是也是bean类型就可以嵌套
<beans>
<bean id="beanOne" class="x.y.ThingOne">
<constructor-arg ref="beanTwo"/>
<constructor-arg ref="beanThree"/>
</bean>
<bean id="beanTwo" class="x.y.ThingTwo"/>
<bean id="beanThree" class="x.y.ThingThree"/>
</beans>
只要对象被注入,不管最后getBean没有,所有对象在容器context里面都已经创建好了,即使你没有用它。就好像婚庆介绍所,你可以去里面找对象,当无论你去不去那里面的对象都在那,跑不了。