当我们需要用到工厂模式的时候,也可以交给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
分享到:
相关推荐
总结起来,"SpringDemo-master.zip"是一个展示了Spring与MyBatis集成的实例,通过这个项目,开发者可以学习如何在Spring环境中配置和使用MyBatis,理解两者之间的协作机制,以及如何通过注解和XML配置文件实现数据...
1. **核心容器**:包括Core Container和Beans模块,定义了Spring的基本部分,如Bean工厂、ApplicationContext和依赖注入功能。Bean工厂是Spring的基石,它负责创建、管理和配置对象。 2. **数据访问/集成**:如JDBC...
这包括了Spring的核心模块,如Core Container(包含Bean工厂和依赖注入)、Data Access/Integration(如JDBC和ORM支持)、Web(MVC框架和WebSocket支持)以及AOP(面向切面编程)。此外,这个包可能还包括其他相关...
核心容器包括Bean工厂(BeanFactory)和ApplicationContext,它们是Spring的核心,负责对象的创建、管理及依赖注入。 在`spring-framework-5.1.4.RELEASE-docs.zip`中,我们可以找到详细的API文档和用户指南,这些...
2. **spring-beans**: 支持Bean工厂和XML配置,是IoC容器实现的基础。 3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面...
Beans模块提供了Bean工厂,它是Spring管理对象的中心,而Context模块扩展了Bean工厂,提供了一种上下文模型,可以加载其他容器和资源。 2. **Data Access/Integration**(数据访问/集成):该模块涵盖了JDBC、ORM、...
深入Spring Framework 4.3.0.RELEASE的源码,我们可以发现它不仅在设计模式上的巧妙应用,如工厂模式、代理模式等,还在性能优化上做了大量工作,如使用缓存减少重复计算、避免反射的开销等。此外,源码中还包含了...
依赖注入通过Bean工厂和ApplicationContext实现,使得对象之间的关系不再硬编码,增强了代码的可测试性和可维护性。AOP则允许开发者定义横切关注点,如日志、事务管理等,提高了代码的复用性和解耦。 在5.2.25....
1. **核心容器**:这是Spring框架的基础,包括Bean工厂(BeanFactory)和应用上下文(ApplicationContext)。BeanFactory负责创建、管理对象,而ApplicationContext则增加了国际化、事件传播、AOP代理等功能。 2. *...
其中,核心容器(Core Container)的增强,如Bean工厂(Bean Factory)和应用上下文(ApplicationContext)的优化,使得配置和管理对象更加简洁高效。 其次,Spring MVC在5.0.1.RELEASE中也有所升级,支持HTTP/2...
10. **工具集**:Spring 2.5包含了一个强大的工具集,如Schema工具,用于生成基于XML配置的Java源代码,以及Bean工厂工具,用于在运行时检查和操作Bean。 这个"Spring2.5-中文参考手册chm.zip"文件将帮助开发者深入...
7. **模块化设计**:Spring Framework由多个模块组成,如Core Container(包含Bean工厂和核心工具类)、Data Access/Integration(包含JDBC和ORM支持)、Web模块(包含Spring MVC)等,这种模块化设计使开发者可以...
每个模块都有其特定的功能,如Core Container中的Bean工厂是Spring的核心,负责对象的创建和管理。 2. **依赖注入(Dependency Injection, DI)** Spring的DI是其核心特性之一,通过XML配置或注解方式实现对象之间...
5.0.19.RELEASE版本中的Bean工厂和ApplicationContext接口,使得开发者能够轻松管理对象的生命周期和依赖关系,从而实现松耦合和高内聚的设计原则。 2. **AOP(面向切面编程)**:Spring的AOP支持允许开发者定义...
第五步,“tiny-spring-step-5-inject-bean-to-bean.zip”,讲解了Bean之间的依赖注入,这是Spring框架实现组件化的重要手段。你将学习如何通过容器自动管理Bean之间的依赖关系,实现组件间的协作。 接下来,“tiny...
4. 使用@Autowired注解或者通过Spring的bean工厂获取到Mapper接口的实例,进行数据库操作。 在这个"spring-mybatis-spring-1.0.0-RC2.zip"资源包中,包含了整合Spring和MyBatis所需的配置文件、Mapper接口和示例...
1. **Spring Core**:提供了DI和AOP的基础,以及bean工厂和应用上下文,这是整个框架的基础。 2. **Spring JDBC**:简化了JDBC的使用,提供了事务管理,使数据库操作更易管理。 3. **Spring ORM**:支持多种ORM框架...
Spring Core是基础,提供了容器服务,如Bean工厂和ApplicationContext,负责对象的创建、配置和管理。Spring Beans构建于Core之上,主要用于实现依赖注入。Spring AOP提供了实现切面编程的工具。Spring JDBC和Spring...
"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...