`
jijun87120681
  • 浏览: 40767 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring学习----工厂Bean

阅读更多

 

当我们需要用到工厂模式的时候,也可以交给Spring容器管理,此时Spring容器管理的就不是普通Bean,可称为“工厂Bean”。此时,应用程序调用getBean()是,Spring返回的不是直接创建的Bean,而是“工厂Bean”创建的Bean。如下图所示:


 

那Spring怎么配置工厂Bean,方法如下:

一,使用静态工厂

 

 

 

public class StaticFactoryBean

    {

        public static Object createEmptyObject()

        {

            return new Object();

        }

    }

 

 

XML配置,通过factory-method指定静态方法

 

<bean id="emptyObject" class="StaticFactoryBean" factory-method="createEmptyObject"></bean>

 

 

 

调用getBean("emptyObject")便会调用StaticFactoryBean的createEmptyObject()方法,返回一个Object对象

 

 

 

二,使用实例工厂

 

 

 

public class InstanceFactoryBean

{

    private String format = "yy-MM-dd HH:mm:ss";

    public void setFormat(String format)

    {

        this.format = format;

    }



    public String createTime()

    {

        return new SimpleDateFormat(format).format(new Date());

    }

}

 

 

 

这时XML配置需要配置两个Bean:

 

 

 

<bean id="instanceFactoryBean" class="InstanceFactoryBean">

    <property name="format" value="yy-MM-dd HH:mm:ss"></property>

</bean>

<bean id="currentTime" factory-bean="instanceFactoryBean" factory-method="createTime"></bean>

 

 

第一个Bean指定实例工厂,第二个Bean指定实例工厂名称和方法名。调用getBean("currentTime")即会调用InstanceFactoryBean的createTime方法

 

 

三,实现FactoryBean接口

FactoryBean源代码如下:

 

 

 

/**
 * Interface to be implemented by objects used within a {@link BeanFactory}
 * which are themselves factories. If a bean implements this interface,
 * it is used as a factory for an object to expose, not directly as a bean
 * instance that will be exposed itself.
 *
 * <p><b>NB: A bean that implements this interface cannot be used as a
 * normal bean.</b> A FactoryBean is defined in a bean style, but the
 * object exposed for bean references ({@link #getObject()} is always
 * the object that it creates.
 *
 * <p>FactoryBeans can support singletons and prototypes, and can
 * either create objects lazily on demand or eagerly on startup.
 * The {@link SmartFactoryBean} interface allows for exposing
 * more fine-grained behavioral metadata.
 *
 * <p>This interface is heavily used within the framework itself, for
 * example for the AOP {@link org.springframework.aop.framework.ProxyFactoryBean}
 * or the {@link org.springframework.jndi.JndiObjectFactoryBean}.
 * It can be used for application components as well; however,
 * this is not common outside of infrastructure code.
 */
public interface FactoryBean<T> {


 T getObject() throws Exception;


 Class<?> getObjectType();


 boolean isSingleton();

}

 

 

 

 

注释大致翻译如下:<!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /-->

实现FactoryBean接口的对象,本身就是工厂类。如果一个bean实现了这个接口,它是用来作为对象创建的工厂,而不是直接将本身作为一个bean实例。

注:实现该接口的bean不能被用来作为一个普通的bean。一个FactoryBean定义bean的风格,但返回bean引用的对象getObject(),始终是它创建的对象。

FactoryBean可以支持单例和原型,延迟或启动创建对象。SmartFactoryBean接口允许更细粒度的控制。

在框架中有很多实现了此接口,例如为AOP:org.springframework.aop.framework.ProxyFactoryBean或org.springframework.jndi.JndiObjectFactoryBean。

 

 

 

  • 大小: 18.5 KB
0
0
分享到:
评论

相关推荐

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    本资源是一篇关于学习和应用SSM框架(Spring、SpringMVC、MyBatis)的学习记录系列文章中的第六天...通过学习这篇文章,你将会对Spring框架有一个初步的了解,并能够使用Spring的IoC容器实现控制反转和简单工厂模式。

    设计模式-工厂模式

    设计模式-工厂模式 学习练习的代码 1.简单工厂模式 2.方法工厂模式 3.抽象工厂模式 4.模拟Spring Bean工厂练习

    spring学习笔记(有代码有注解解释)

    内容概要:学习Spring的一些学习笔记,主要学习Spring 框架两大核心机制(IoC、AOP) 笔记大纲:阅读笔记可以学习了解一下内容 如何使用 IoC ;配置文件;IoC 底层原理;通过运行时类获取 bean;通过有参构造创建 ...

    spring-master-class:Spring Framework 5的更新介绍。成为了解Spring In Depth核心功能的专家。 您将在课程期间编写单元测试,AOP,JDBC和JPA代码。 包括对Spring Boot,JPA,Eclipse,Maven,JUnit和Mockito的介绍

    您将学到什么您将学习Spring框架的基础知识-依赖注入,IOC容器,应用程序上下文和Bean工厂。 您将了解如何使用Spring注释-@ Autowired,@ Component,@ Service,@ Repository,@ Configuration,@ Primary...。 您...

    Spring框架通过工厂创建Bean的三种方式实现

    主要介绍了Spring框架通过工厂创建Bean的三种方式实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    战争雷霆warthunder解包工具-exe版本-可应用于enlisted入伍等游戏

    阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。 能学到什么:①工厂模式、策略模式...

    Spring源码jar

    Spring4.2源码学习,Spring Bean的创建是典型的工厂模式,这一系列的Bean工厂,也即IOC容器为开发者管理对象间的依赖关系提供了很多便利和基础服务。

    Spring源码学习三:BeanFactory解析1

    BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满

    apache-zookeeper-3.7.1-bin.tar.gz

    apache-zookeeper-3.7.1-bin.tar.gz ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    spring in action英文版

     2.4.2 对Bean工厂进行后处理  2.4.3 分散配置  2.4.4 定制属性编辑器  2.4.5 解析文本信息  2.4.6 监听事件  2.4.7 发布事件  2.4.8 感知其他Bean  2.5 小结  第3章 创建切面  3.1 ...

    spring学习资料

    3. //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象, 4. //如果需要得到工厂本身,需要转义 5. String FACTORY_BEAN_PREFIX = "&"; 6. 7. //这里根据...

    apache-tomcat-8.0.32

    apache-tomcat-8.0.32 ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    Apifox-windows-latest

    内容概要:通过带着读者手写简化版Spring...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    Spring学习

    Springboot框架源码解读学习Spring框架主要有SpirngMVC提供Web功能执行Springboot提供自动配置功能以及大部分常用资源配置整合完成开箱即用SpringCloud定义了一整套整体微服务架构所需组件的解决方案1.这里启动的...

    apache-maven-3.2.5.zip

    apache-maven-3.2.5.zip ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    Spring中实例化bean的四种方式详解

    主要给大家介绍了关于Spring中实例化bean的四种方式,分别是setter 方法、构造函数、静态工厂以及实例工厂等四种方法,分别给出了示例代码供大家参考学习,需要的朋友们下面随着小编来一起学习学习吧。

    zookeeper-3.4.6.zip

    zookeeper-3.4.6.zip ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    Java基础 反射篇.md

    反射是一个非常重要的知识点,在学习Spring 框架时,Bean的初始化用到了反射,在破坏单例模式时也用到了反射,在获取标注的注解时也会用到反射······ 当然了,反射在日常开发中,我们没碰到过多少,至少我没...

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

Global site tag (gtag.js) - Google Analytics