`
jijun87120681
  • 浏览: 41354 次
  • 性别: 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
分享到:
评论

相关推荐

    SpringDemo-master.zip

    总结起来,"SpringDemo-master.zip"是一个展示了Spring与MyBatis集成的实例,通过这个项目,开发者可以学习如何在Spring环境中配置和使用MyBatis,理解两者之间的协作机制,以及如何通过注解和XML配置文件实现数据...

    spring-framework-master

    1. **核心容器**:包括Core Container和Beans模块,定义了Spring的基本部分,如Bean工厂、ApplicationContext和依赖注入功能。Bean工厂是Spring的基石,它负责创建、管理和配置对象。 2. **数据访问/集成**:如JDBC...

    官方原版完整包 spring-framework-5.3.6.RELEASE-dist.zip

    这包括了Spring的核心模块,如Core Container(包含Bean工厂和依赖注入)、Data Access/Integration(如JDBC和ORM支持)、Web(MVC框架和WebSocket支持)以及AOP(面向切面编程)。此外,这个包可能还包括其他相关...

    官方原版完整包 spring-framework-5.3.1.RELEASE.zip

    2. **spring-beans**: 支持Bean工厂和XML配置,是IoC容器实现的基础。 3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面...

    官方原版源码spring-framework-5.1.4.RELEASE.zip

    核心容器包括Bean工厂(BeanFactory)和ApplicationContext,它们是Spring的核心,负责对象的创建、管理及依赖注入。 在`spring-framework-5.1.4.RELEASE-docs.zip`中,我们可以找到详细的API文档和用户指南,这些...

    官方原版源码 spring-5.2.8.RELEASE.zip

    Beans模块提供了Bean工厂,它是Spring管理对象的中心,而Context模块扩展了Bean工厂,提供了一种上下文模型,可以加载其他容器和资源。 2. **Data Access/Integration**(数据访问/集成):该模块涵盖了JDBC、ORM、...

    spring-framework-4.3.0.RELEASE(源码已经成功编译)

    深入Spring Framework 4.3.0.RELEASE的源码,我们可以发现它不仅在设计模式上的巧妙应用,如工厂模式、代理模式等,还在性能优化上做了大量工作,如使用缓存减少重复计算、避免反射的开销等。此外,源码中还包含了...

    spring-framework-5.2.25.RELEASE.tar.gz

    依赖注入通过Bean工厂和ApplicationContext实现,使得对象之间的关系不再硬编码,增强了代码的可测试性和可维护性。AOP则允许开发者定义横切关注点,如日志、事务管理等,提高了代码的复用性和解耦。 在5.2.25....

    Spring javadoc-api.rar

    1. **核心容器**:这是Spring框架的基础,包括Bean工厂(BeanFactory)和应用上下文(ApplicationContext)。BeanFactory负责创建、管理对象,而ApplicationContext则增加了国际化、事件传播、AOP代理等功能。 2. *...

    官方源码 spring-framework-5.3.4.zip

    每个模块都有其特定的功能,如Core Container中的Bean工厂是Spring的核心,负责对象的创建和管理。 2. **依赖注入(Dependency Injection, DI)** Spring的DI是其核心特性之一,通过XML配置或注解方式实现对象之间...

    spring-framework-5.0.1.RELEASE官方完整包加官方文档

    其中,核心容器(Core Container)的增强,如Bean工厂(Bean Factory)和应用上下文(ApplicationContext)的优化,使得配置和管理对象更加简洁高效。 其次,Spring MVC在5.0.1.RELEASE中也有所升级,支持HTTP/2...

    Spring2.5-中文参考手册chm.zip

    10. **工具集**:Spring 2.5包含了一个强大的工具集,如Schema工具,用于生成基于XML配置的Java源代码,以及Bean工厂工具,用于在运行时检查和操作Bean。 这个"Spring2.5-中文参考手册chm.zip"文件将帮助开发者深入...

    spring-framework-5.0.2.RELEASE 源码包

    7. **模块化设计**:Spring Framework由多个模块组成,如Core Container(包含Bean工厂和核心工具类)、Data Access/Integration(包含JDBC和ORM支持)、Web模块(包含Spring MVC)等,这种模块化设计使开发者可以...

    官方原版完整包 spring-framework-5.0.19.RELEASE.zip

    5.0.19.RELEASE版本中的Bean工厂和ApplicationContext接口,使得开发者能够轻松管理对象的生命周期和依赖关系,从而实现松耦合和高内聚的设计原则。 2. **AOP(面向切面编程)**:Spring的AOP支持允许开发者定义...

    简单Spring框架模拟器--Demo

    第五步,“tiny-spring-step-5-inject-bean-to-bean.zip”,讲解了Bean之间的依赖注入,这是Spring框架实现组件化的重要手段。你将学习如何通过容器自动管理Bean之间的依赖关系,实现组件间的协作。 接下来,“tiny...

    spring-mybatis-spring-1.0.0-RC2.zip

    4. 使用@Autowired注解或者通过Spring的bean工厂获取到Mapper接口的实例,进行数据库操作。 在这个"spring-mybatis-spring-1.0.0-RC2.zip"资源包中,包含了整合Spring和MyBatis所需的配置文件、Mapper接口和示例...

    spring-dist

    1. **Spring Core**:提供了DI和AOP的基础,以及bean工厂和应用上下文,这是整个框架的基础。 2. **Spring JDBC**:简化了JDBC的使用,提供了事务管理,使数据库操作更易管理。 3. **Spring ORM**:支持多种ORM框架...

    spring-framework-5.0.2.RELEASE-中文注释版-终极完美版.rar

    Spring Core是基础,提供了容器服务,如Bean工厂和ApplicationContext,负责对象的创建、配置和管理。Spring Beans构建于Core之上,主要用于实现依赖注入。Spring AOP提供了实现切面编程的工具。Spring JDBC和Spring...

    spring-4.3.21.RELEASE.rar

    "spring-beans-4.3.21.RELEASE-javadoc.jar"提供了Spring的Bean工厂,它是IoC容器的基础,负责创建、配置和管理对象,实现依赖注入。 "spring-core-4.3.21.RELEASE-javadoc.jar"和"spring-core-4.3.21.RELEASE.jar...

Global site tag (gtag.js) - Google Analytics