1.使用无参构造来进行IOC的对象创建
public class SpringTest {
@Test
public void test1(){
//加载配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//获得User对象,IOC控制反转,这里调用的是User的无参构造器
User user = (User) app.getBean("us1");
user.setUid(1);
user.setUname("小星");
user.setUage(20);
user.setUsex("男");
System.out.println(user);
}
}
applicationContext添加Bean标签
<!--id:唯一表示 class:创建对象的全局限定名-->
<bean id="us1" class="com.msb.pojo.User"/>
如果我们把User类中的无参构造方法注释掉,运行后直接抛异常
2.使用有参构造来进行IOC的对象创建
首先为User类创建有参构造方法
public User(Integer uid, String uname, Integer uage, String usex) {
this.uid = uid;
this.uname = uname;
this.uage = uage;
this.usex = usex;
}
applicationContext添加Bean标签
<!--调用有参构造-->
<bean id="us2" class="com.msb.pojo.User">
<!--
name值与构造方法参数名相同
index[下标0开始],对应构造函数的参数下标
type指定数据类型一般不用
value一般为简单数据类型赋值
ref一般为引用数据类型赋值
-->
<constructor-arg name="uid" value="2"/>
<constructor-arg name="uname" value="小星测试有参构造"/>
<constructor-arg name="uage" value="20"/>
<constructor-arg name="usex" value="男"/>
</bean>
测试方法
public class SpringTest {
ApplicationContext app;
@Before
public void init(){
//加载配置文件
app = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void test2(){
//这里调用的是User的有参构造器
User user = (User) app.getBean("us2");
System.out.println(user);
}
}
运行结果如下
3.使用工厂模式进行IOC的对象创建,这里有四种方案
方案一:实例工厂类型+无参方法
我们首先创建一个工厂类
public class UsersFactory {
public User getInstance(){
return new User(3,"Factory01",10,"male");
}
}
applicationContext添加Bean标签
<!--
使用工厂模式创建对象
1.创建工厂对象
2,根据工厂对象,创建User对象
-->
<bean id="factory" class="com.msb.factory.UsersFactory"/>
<bean id="us3" factory-bean="factory" factory-method="getInstance"/>
测试方法
@Test
public void test3(){
User user = (User) app.getBean("us3");
System.out.println(user);
}
运行结果如下
方案二:静态工厂类型+无参方法
首先修改工厂类的方法为静态方法
public static User getInstance(){
return new User(3,"Factory01",10,"male");
}
applicationContext添加Bean标签
<bean id="us4" class="com.msb.factory.UsersFactory" factory-method="getInstance"/>
测试方法
@Test
public void test4(){
User user = (User) app.getBean("us4");
System.out.println(user);
}
运行结果如下
方案三:实例工厂类型+有参方法
首先修改工厂类的方法,传入User对象
public User getInstance(User user){
return user;
}
applicationContext添加Bean标签
<bean id="factory" class="com.msb.factory.UsersFactory"/>
<bean id="us5" factory-bean="factory" factory-method="getInstance">
<!--这里我们ref引用类型传入的是us2-->
<constructor-arg name="user" ref="us2"></constructor-arg>
</bean>
测试方法
@Test
public void test5(){
User user = (User) app.getBean("us5");
System.out.println(user);
}
运行结果如下
方案四:静态工厂类型+有参方法
首先修改工厂类的方法为静态方法,传入User对象
public static User getInstance(User user){
return user;
}
applicationContext添加Bean标签
<bean id="us6" class="com.msb.factory.UsersFactory" factory-method="getInstance">
<constructor-arg name="user" ref="us2"></constructor-arg>
</bean>
测试方法
@Test
public void test6(){
User user = (User) app.getBean("us6");
System.out.println(user);
}
运行结果如下