1,编写bean

 package com.songyan.demo1;

 /**
* 要创建的对象类
* @author sy
*
*/
public class User {
private String name;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

2,编写工厂

 package com.songyan.factory;

 import com.songyan.demo1.User;

 /**
* @author sy
* 工厂类
*/
public class Factory { /**
* 非静态方法创建对象
* @return
*/
public User create()
{
return new User();
}
}

3, 编写xml

 <?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 "> <!--通过构造函数创建对象 -->
<!-- <bean id="userid" class="com.songyan.demo1.User"></bean> --> <!--通过静态工厂创建对象 -->
<!--通过 com.songyan.staticfactory.UserFactory类中的createUser方法创建名为user2的对象 -->
<!-- <bean name="user2" class="com.songyan.staticfactory.UserFactory" factory-method="createUser"></bean> --> <bean name="factory" class="com.songyan.factory.Factory"></bean>
<bean name="user3" class="com.songyan.demo1.User" factory-bean="factory" factory-method="create"></bean>
</beans>

这里在配置的时候需要配置两个对象,factory和bean

因为创建对象的方法是非静态的,所以必须创建一个factory的对象才可以调用创建对象的方法

4, 测试类

 @Test
public void test()
{
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
User user3=(User)applicationContext.getBean("user3");
System.out.println(user3);
}

容器通过user3这个username/userid找到Bean对象,通过这个bean对象里面配置的factorybean,和factorymethod找到factorybean,根据factorybean中定义的class创建工厂对象,再根据userbean中配置的factorymethod调用factory的create方法创建一个User对象。

5, 输出结果

bean实例化--工厂方法的更多相关文章

  1. bean的创建(五)第二部分 寻找bean的工厂方法实例化

    instanceWrapper = createBeanInstance(beanName, mbd, args); AbstractAutowireCapableBeanFactory.create ...

  2. 静态工厂方法和实例工厂方法及普通的bean

    容纳你的bean  bean工厂:最简单的容器,提供了基础的依赖注入支持.创建各种类型的Bean.  应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务. ...

  3. Spring4.0学习笔记(6) —— 通过工厂方法配置Bean

    1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...

  4. spring 通过工厂方法配置Bean

    概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...

  5. Spring 工厂方法创建Bean 学习(三)

    1, 静态工厂方法创建Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建 ...

  6. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  7. 工厂方法在Spring源码中的运用

    我们都知道Spring中IOC是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的. 在上篇文章中我们懂了什么是工厂模式,这篇文章就带着学过的概念 ...

  8. Spring实例化Bean三种方法:构造器、静态工厂、实例工厂

    Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理. 一.Bean的实例化: 构造器实例化.静态工厂实例化.实例工厂方式实例化. 目录: 构造器实例化: xml配置 ...

  9. Spring 通过工厂方法(Factory Method)来配置bean

    Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...

随机推荐

  1. php 代码段执行时间

    <?php   //程序运行时间 $starttime = explode(' ',microtime()); echo microtime(); /*········以下是代码区······· ...

  2. 出现java.lang.IllegalArgumentException异常

    严重: Servlet.service() for servlet [office] in context with path [/office] threw exception [Request p ...

  3. URAL 1942 Attack at the Orbit

    B - Attack at the Orbit Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & % ...

  4. lua中如何识别C语言中的struct

    不如用c写比较简单呢 都要在lua中解析好数据结构,不过也可以用ffi呢...proto.lua

  5. 洛谷 P3224 [HNOI2012]永无乡 解题报告

    P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...

  6. 用Sublime搭建Python开发环境(windows)

    1.安装Python 3 去官网下载Python 3,网址:https://www.python.org/downloads/release/python-363/ 双击安装,勾选添加到环境变量. 有 ...

  7. Computer(hdu 2196)

    题意:给出一棵树,求出每个点与距离它最远的点的距离. /* 树形DP 先把无根树转为有根树,对于一个节点i来说,与它相距最远的点有两种可能,一是在它的子树中,二是不在,我们分别用f[i][0]和f[i ...

  8. WCF回调操作

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.s ...

  9. [HNOI2002] 公交车路线

    题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站A到 ...

  10. matlab fft demo

    clf; fs=32;N=1024;   %采样频率和数据点数 n=0:N-1; t=n/fs;   %时间序列 x=1*sin(t); %信号 y=fft(x,N);    %对信号进行快速Four ...