bean实例化--工厂方法

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