Spring - BeanFactory

* The root interface for accessing a Spring bean container.
* This is the basic client view of a bean container;

BeanFactory接口的实现持有beanDefinitions,每个beanDefinition对象有唯一的name。根据beanDefinitaion,BeanFactory可以返回一个Prototype对象,也可能返回一个单例对象,分别对应原型设计模式和单例设计模式。自Spring2.0之后,依赖于具体的applicationContext提供了更多的scopes,如request和session在web环境中。

BeanFactory是一个应用组件的中央注册中心和把配置集中化。
使用依赖注入的方式通过setters和construnctors配置应用对象(push configuratin),要优于使用其他形式的pull configuration的方式,如BeanFactory lookup。

正常情况下,BeanFactory会从配置源中导入Bean定义,例如XML文档。从何处载入bean定义并没有限制,bean定义可存储在LDAP,RDBMS,XML,property file等。建议在Bean之间使用以来注入的机制。

BeanFactory接口的所有操作也会去检查parent BeanFactory如果是一个HierchicalBeanFactory实例的话。如果bean定义没有在当前beanfactory中找到,会去上层beanfactory中查找,子beanfactory中的bean会覆盖父beanfactory中同名的bean。

beanfactory的实现支持标准的bean lifecycle接口,初始化方法的标准顺序为:
BeanNameAware's setBeanName
BeanClassLoaderAware's setBeanClassLoader
BeanFactoryAware's setBeanFactory
EnvironmentAware's setEnvironment
EmbeddedValueResolverAware's setEmbeddedValueResolver
ResourceLoaderAware's setResourceLoader
* (only applicable when running in an application context)
ApplicationEventPublisherAware's setApplicationEventPublisher
* (only applicable when running in an application context)
MessageSourceAware's setMessageSource
* (only applicable when running in an application context)
ApplicationContextAware's setApplicationContext
* (only applicable when running in an application context)
ServletContextAware's setServletContext
* (only applicable when running in a web application context)
postProcessBeforeInitialization methods of BeanPostProcessors
InitializingBean's afterPropertiesSet
a custom init-method definition
postProcessAfterInitialization methods of BeanPostProcessors

当beanfactory shutdown时,下面的lifecycle方法会执行:
postProcessBeforeDestruction methods of DestructionAwareBeanPostProcessors
DestructionAwareBeanPostProcessors
DisposableBean's destroy
a custom destroy-method definition

BeanFactory的类结构如下:

 

v2-23e6c4b766b34d0705f299b9f98cd60f_b.png

转载于:https://my.oschina.net/u/3628724/blog/1490453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值