Spring BeanFactory

BeanFactory简介

这是bean容器的基本客户视图。其他接口,例如ListableBeanFactory和 ConfigurableBeanFactory 可用于特定目的。

该接口由包含多个bean定义的对象实现,每个定义均由String名称唯一标识。根据bean的定义,工厂将返回所包含对象的独立实例(Prototype设计模式), 或者返回单个共享实例(Singleton设计模式的替代方案,其中实例是作用域中的单例)的工厂)。将返回哪种类型的实例取决于bean工厂的配置:API是相同的。 从Spring 2.0开始,根据具体的应用程序上下文,可以使用更多范围(例如,Web环境中的“请求”和“会话”范围)。

这种方法的重点是BeanFactory是应用程序组件的中央注册表,并集中了应用程序组件的配置(例如,不再需要单个对象读取属性文件)。

请注意,通常最好依赖于依赖注入(“ push”配置)通过设置器或构造函数配置应用程序对象,而不是使用任何形式的“ pull”配置(例如BeanFactory查找)。 Spring的Dependency Injection功能是使用此BeanFactory接口及其子接口实现的。

通常,BeanFactory会加载存储在配置源(例如XML文档)中的bean定义,并使用该org.springframework.beans 包来配置bean。 但是,实现可以根据需要直接在Java代码中直接返回它创建的Java对象。定义的存储方式没有任何限制:LDAP,RDBMS,XML,属性文件等。 鼓励实现以支持Bean之间的引用(Dependency Injection)。

与中的方法相比ListableBeanFactory,此接口中的所有操作还将检查父工厂是否为 HierarchicalBeanFactory。 如果在此工厂实例中未找到bean,则将询问直接的父工厂。该工厂实例中的Bean应该覆盖任何父工厂中的同名Bean。

Bean工厂实现应尽可能支持标准Bean生命周期接口。全套初始化方法及其标准顺序为:

  1. BeanNameAware的 setBeanName

  2. BeanClassLoaderAware的 setBeanClassLoader

  3. BeanFactoryAware的 setBeanFactory

  4. EnvironmentAware setEnvironment

  5. EmbeddedValueResolverAware的 setEmbeddedValueResolver

  6. ResourceLoaderAware setResourceLoader (仅在应用程序上下文中运行时适用)

  7. ApplicationEventPublisherAware的setApplicationEventPublisher (仅适用于在应用程序上下文中运行的情况)

  8. MessageSourceAware的setMessageSource (仅适用于在应用程序上下文中运行的情况)

  9. ApplicationContextAware的setApplicationContext (仅适用于在应用程序上下文中运行)

  10. ServletContextAware的setServletContext (仅适用于在Web应用程序上下文中运行的情况)

  11. postProcessBeforeInitialization BeanPostProcessors的方法

  12. InitializingBean的 afterPropertiesSet

  13. 自定义的初始化方法定义

  14. postProcessAfterInitialization BeanPostProcessors的方法

在关闭bean工厂时,以下生命周期方法适用:

  1. postProcessBeforeDestruction DestructionAwareBeanPostProcessors的方法

  2. 一次性豆的 destroy

  3. 自定义销毁方法定义

BeanFactory类图

BeanFactory类图

BeanFactory源码

Last updated

Was this helpful?