使用IOC来创建对象有三种方式
1 .通过无参的构造方法来创建 通过set方法注入属性
pojo类
public class User {
public User() {
System.out.println("User的无参构造方法");
}
private String name;
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
beans.xml
<bean id="user" class="cn.sxt.vo.User">
<property name="name" value="张三"></property>
</bean>
2 .通过有参的构造方法来创建 不需要set方法
pojo类
public class User {
private String name;
public User(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
beans.xml有三种写法
(1)
<bean id="user" class="cn.sxt.vo.User">
<!-- index指构造方法参数下标 -->
<constructor-arg index="0" value="张三"></constructor-arg>
</bean>
(2)
<bean id="user" class="cn.sxt.vo.User">
<!-- name指参数名称 -->
<constructor-arg name="name" value="李四"></constructor-arg>
</bean>
(3)
<bean id="user" class="cn.sxt.vo.User">
<!-- type指参数类型,一般情况下参数类型都不一样,如果一样,按顺序来 -->
<constructor-arg type="java.lang.String" value="李四"></constructor-arg>
</bean>
第三种很少用,一般用index和name居多
3 .通过工厂方法来创建对象 这种方法用的更少,因为spring已经提供了工厂类,我们为什么还要自己去写
(1)静态工厂
public class UserFactory {
public static User newInstance(String name){
return new User(name);
}
}
beans.xml
<bean id="user" class="cn.sxt.factory.UserFactory" factory-method="newInstance">
<constructor-arg index="0" value="赵六"></constructor-arg>
</bean>
(2)动态工厂
public class UserDynamicFactory {
public User newInstance(String name){
return new User(name);
}
}
<bean id="user" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="赵六"></constructor-arg>
</bean>
<bean id="userFactory" class="cn.sxt.factory.UserDynamicFactory"/>
静态工厂直接写上class即可,因为调用的是类方法,与对象无关
动态工厂需要先创建工厂对象再调用方法,所以需要先bean,再factory-bean引用。