`

Sping 中的 beanFactory 与 FactoryBean

阅读更多

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的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...

    Spring中BeanFactory与FactoryBean接口的区别详解

    在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...

    68-BeanFactory与FactoryBean1

    Spring 中的 BeanFactory 和 FactoryBean BeanFactory 是 Spring 框架中的核心组件之一,负责管理 Bean 的生命周期,包括实例化、配置和注入对象之间的关系。它是 Spring IOC(控制反转)容器的核心组件,提供了...

    spring中的BeanFactory与FactoryBean的讲解

    Spring中的BeanFactory与FactoryBean的讲解 在Spring框架中,BeanFactory和FactoryBean都是非常重要的概念,它们都是Spring IoC容器的组成部分。今天,我们将深入探讨这两个概念的讲解。 一、BeanFactory ...

    Spring BeanFactory和FactoryBean区别解析

    Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...

    深入了解Spring中的FactoryBean

    FactoryBean可以用来创建和管理复杂的对象实例,并且可以与其他Spring组件集成,例如BeanFactory和ApplicationContext。 六、结论 FactoryBean是一个非常重要的概念,在Spring框架中扮演着核心角色。它提供了一种...

    详解Spring中的FactoryBean

    在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...

    spring中FactoryBean中的getObject()方法实例解析

    Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...

    Spring源码流程图

    在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、BeanFactoryPostProcessor、BeanPostProcessor等。这些组件协作以实现Bean的创建、初始化和生命周期管理。 Bean定义信息 Bean定义信息是描述Bean...

    Spring5.0介绍.pptx

    在学习了书籍Spring5.0后,将自己的理解总结成了ppt,主要包含了IoC 和 DI,AOP,BeanFactory和FactoryBean,事务管理四个方面

    Spring 框架的设计理念与设计模式分析

    它提供了创建和管理Bean的基础架构,同时也包含了其他核心类和接口,比如BeanFactory和FactoryBean等。 - **Core组件的特点**:Core组件更像是一个工具箱,包含了大量实用类和接口,用于支持Bean的创建和配置过程。...

    spring 中常用的设计模式.docx

    Spring 框架作为 Java 开发领域中的一个重要组成部分,不仅提供了强大的依赖注入和面向切面编程能力,还广泛运用了各种设计模式,使得整个框架更加灵活、易于扩展与维护。本文将深入探讨 Spring 中运用的一些典型...

    Spring IoC源码分析1

    4. **BeanFactory与FactoryBean的区别**: - **BeanFactory**:是Spring IoC容器的基础接口,负责管理和控制bean的生命周期。而`FactoryBean`是提供bean实例的一种特殊机制。 - **FactoryBean.getObject()**:返回...

    Spring源代码解析(一):IOC容器.doc

    在实际使用中,Spring通常使用ApplicationContext接口,它扩展了BeanFactory并提供了额外的功能,如事件发布、消息源支持和国际化。ApplicationContext通常是从XML文件、Java配置类或注解中加载Bean定义的。 理解...

    【Spring】总结Spring整合Mybatis的底层原理实现步骤

    Bean与普通Java对象的区别在于,Bean是由Spring负责实例化的,同时,当从Spring容器中获取Bean时,Spring还会对Bean中带有`@Autowired` 注解的属性进行自动注入赋值,这是手工new对象无法实现的特性。Spring容器中的...

    猿星人的修仙之路II

    - 实现了 `FactoryBean&lt;T&gt;` 接口,根据该 Bean 的 ID 从 BeanFactory 中获取的 Bean 实际上是 `FactoryBean` 的 `getObject()` 返回的对象,而不是 `FactoryBean` 本身。 - 若要获取 `FactoryBean` 对象,可以在 ID ...

    Java深入分析Spring源码

    1、简单工厂模式(Factory):Spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 Bean 对象。 2、工厂方法模式(FactoryMethod):Spring 中的 FactoryBean 就是工厂方法模式的体现,...

Global site tag (gtag.js) - Google Analytics