Spring 中有两个最最基本的接口:BeanFactory 与 FactoryBean,可以说是核心中的核心。
简单的说,BeanFactory就是容器提供给使用者获取Bean的接口,Spring中的ApplicationContext 就是实现了这个接口。粗糙的理解:BeanFactory就是容器。
而FactoryBean则是产生Bean的工厂,许多时候,简单的通过Spring 实例化一个Bean,并不能满足我们的需求,最明显的例子就是数据库的连接池,这个连接池就是一个FactoryBean。Spring 如果发现某个Bean实现了FactoryBean,那么当调用者取这个Bean的时候,不是直接返回这个Bean,而是去调用这个Bean的getObject(),再返回结果。
FactoryBean的定义很简单,只有三个方法:
public interface FactoryBean<T> { T getObject() throws Exception; // 拿到一个Bean Class<?> getObjectType(); //返回Bean的类型 boolean isSingleton(); //是否单例 }
再看一个例子,hibernate的sessionFactory的配置(我们实际需要的是一个SessionFactory对象,但配置中却是LocalSessionFactoryBean类,为啥?就是因为LocalSessionFactoryBean返回的是SessionFactory)
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
</value>
</property>
</bean>
LocalSessionFactoryBean 就是实现了FactoryBean的接口,
public class LocalSessionFactoryBean extends HibernateExceptionTranslator implements FactoryBean<SessionFactory>, ResourceLoaderAware, InitializingBean, DisposableBean { .....其它代码........ private SessionFactory sessionFactory; .....其它代码........ @Override //设置完参数后,产生sessionFactory public void afterPropertiesSet() throws IOException { .....其它代码........ this.sessionFactory = buildSessionFactory(sfb); } @Override //返回sessionFactory public SessionFactory getObject() { return this.sessionFactory; } .....其它代码........ }
如果要得到FactoryBean 本身,加一个&,如下面的代码
//从这个FactoryBean中得到一个对象 System.out.println(act.getBean("sessionFactory")); //如果要得到FactoryBean 本身,加一个& System.out.println(act.getBean("&sessionFactory"));
相关推荐
简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...
在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...
Spring 中的 BeanFactory 和 FactoryBean BeanFactory 是 Spring 框架中的核心组件之一,负责管理 Bean 的生命周期,包括实例化、配置和注入对象之间的关系。它是 Spring IOC(控制反转)容器的核心组件,提供了...
Spring中的BeanFactory与FactoryBean的讲解 在Spring框架中,BeanFactory和FactoryBean都是非常重要的概念,它们都是Spring IoC容器的组成部分。今天,我们将深入探讨这两个概念的讲解。 一、BeanFactory ...
Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...
FactoryBean可以用来创建和管理复杂的对象实例,并且可以与其他Spring组件集成,例如BeanFactory和ApplicationContext。 六、结论 FactoryBean是一个非常重要的概念,在Spring框架中扮演着核心角色。它提供了一种...
在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...
Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...
在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、BeanFactoryPostProcessor、BeanPostProcessor等。这些组件协作以实现Bean的创建、初始化和生命周期管理。 Bean定义信息 Bean定义信息是描述Bean...
在学习了书籍Spring5.0后,将自己的理解总结成了ppt,主要包含了IoC 和 DI,AOP,BeanFactory和FactoryBean,事务管理四个方面
它提供了创建和管理Bean的基础架构,同时也包含了其他核心类和接口,比如BeanFactory和FactoryBean等。 - **Core组件的特点**:Core组件更像是一个工具箱,包含了大量实用类和接口,用于支持Bean的创建和配置过程。...
Spring 框架作为 Java 开发领域中的一个重要组成部分,不仅提供了强大的依赖注入和面向切面编程能力,还广泛运用了各种设计模式,使得整个框架更加灵活、易于扩展与维护。本文将深入探讨 Spring 中运用的一些典型...
4. **BeanFactory与FactoryBean的区别**: - **BeanFactory**:是Spring IoC容器的基础接口,负责管理和控制bean的生命周期。而`FactoryBean`是提供bean实例的一种特殊机制。 - **FactoryBean.getObject()**:返回...
在实际使用中,Spring通常使用ApplicationContext接口,它扩展了BeanFactory并提供了额外的功能,如事件发布、消息源支持和国际化。ApplicationContext通常是从XML文件、Java配置类或注解中加载Bean定义的。 理解...
Bean与普通Java对象的区别在于,Bean是由Spring负责实例化的,同时,当从Spring容器中获取Bean时,Spring还会对Bean中带有`@Autowired` 注解的属性进行自动注入赋值,这是手工new对象无法实现的特性。Spring容器中的...
- 实现了 `FactoryBean<T>` 接口,根据该 Bean 的 ID 从 BeanFactory 中获取的 Bean 实际上是 `FactoryBean` 的 `getObject()` 返回的对象,而不是 `FactoryBean` 本身。 - 若要获取 `FactoryBean` 对象,可以在 ID ...
1、简单工厂模式(Factory):Spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 Bean 对象。 2、工厂方法模式(FactoryMethod):Spring 中的 FactoryBean 就是工厂方法模式的体现,...