Test.java(测试类):
package cn.xxx.demo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.xxx.bean.User;
public class Test {
@Test
//创建方式1:空参构造
public void fun1(){
//1 创建容器对象 (在创建容器时,就同时创建好了容器中的所有对象)
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//2 向容器"要"user对象 (对象已经提前被创建好了,只是获取而已)
User u = (User) ac.getBean("user");
//3 打印user对象
System.out.println(u);
}
//创建方式2:静态工厂 (了解)
@Test
public void fun2(){
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
User u = (User) ac.getBean("user2");
System.out.println(u);
}
//创建方式3:实例工厂 (了解)
@Test
public void fun3(){
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
User u = (User) ac.getBean("user3");
System.out.println(u);
}
}
src/applicationContext.xml(Spring配置文件;配置对象的创建方式):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!-- 创建方式1:空参构造创建 -->
<bean name="user" class="cn.xxx.bean.User" init-method="init" destroy-method="destory" ></bean>
<!-- 创建方式2:静态工厂创建
调用UserFactory的createUser静态方法创建名为user2的对象.放入容器
-->
<bean name="user2" class="cn.xxx.demo.UserFactory" factory-method="createUser" ></bean>
<!-- 创建方式3:实例工厂创建
调用UserFactory对象的非静态方法createUser2方法创建名为user3的对象.放入容器
-->
<bean name="user3" factory-bean="userFactory" factory-method="createUser2" ></bean>
<bean name="userFactory" class="cn.xxx.demo.UserFactory" ></bean>
</beans>
UserFactory.java(工厂类):
package cn.xxx.demo;
import cn.xxx.bean.User;
public class UserFactory {
public static User createUser(){ //静态方法
System.out.println("静态工厂创建User");
return new User();
}
public User createUser2(){ //非静态的工厂方法
System.out.println("实例工厂创建User");
return new User();
}
}