1,编写bean
1 package com.songyan.demo1; 2 3 /** 4 * 要创建的对象类 5 * @author sy 6 * 7 */ 8 public class User { 9 private String name; 10 private int age ; 11 public String getName() { 12 return name; 13 } 14 public void setName(String name) { 15 this.name = name; 16 } 17 public int getAge() { 18 return age; 19 } 20 public void setAge(int age) { 21 this.age = age; 22 } 23 24 }
2,编写工厂
1 package com.songyan.factory; 2 3 import com.songyan.demo1.User; 4 5 /** 6 * @author sy 7 * 工厂类 8 */ 9 public class Factory { 10 11 /** 12 * 非静态方法创建对象 13 * @return 14 */ 15 public User create() 16 { 17 return new User(); 18 } 19 }
3, 编写xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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 "> 3 4 <!--通过构造函数创建对象 --> 5 <!-- <bean id="userid" class="com.songyan.demo1.User"></bean> --> 6 7 <!--通过静态工厂创建对象 --> 8 <!--通过 com.songyan.staticfactory.UserFactory类中的createUser方法创建名为user2的对象 --> 9 <!-- <bean name="user2" class="com.songyan.staticfactory.UserFactory" factory-method="createUser"></bean> --> 10 11 <bean name="factory" class="com.songyan.factory.Factory"></bean> 12 <bean name="user3" class="com.songyan.demo1.User" factory-bean="factory" factory-method="create"></bean> 13 </beans>
这里在配置的时候需要配置两个对象,factory和bean
因为创建对象的方法是非静态的,所以必须创建一个factory的对象才可以调用创建对象的方法
4, 测试类
1 @Test 2 public void test() 3 { 4 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); 5 User user3=(User)applicationContext.getBean("user3"); 6 System.out.println(user3); 7 }
容器通过user3这个username/userid找到Bean对象,通过这个bean对象里面配置的factorybean,和factorymethod找到factorybean,根据factorybean中定义的class创建工厂对象,再根据userbean中配置的factorymethod调用factory的create方法创建一个User对象。
5, 输出结果
来源:https://www.cnblogs.com/excellencesy/p/9104834.html