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, 输出结果