1、BeanDefinition概念(辅助Class概念从而实现spring世界的基石)
spring的世界里,把bean的信息(bean与别的bean的关系,bean自身各属性的值)
封装到BeanDefinition,
这样实例化bean时能更加丰富,有了BeanDefinition就不再是用newInstance方法
实例化出一个个光秃秃的对象,而是把对象之间互相建立关系,并把bean充实为
有血有肉的活物。
注:如果你来实现根据xml实例化bean需求,必定会定义类x代表xml里每个
bean的信息,然后根据x来实例化而不是根据xml字符串实例化,这个x就是
BeanDefinition。
2、Bean概念
其实就是对象概念,我这里虚构Bean名词为了方便理解下面别的概念
3、BeanFactory概念
就是个工厂,最出名的方法是getBean(xxx)方法。
注:可以把它当作华强北生产手机的小作坊,内部有很多有特色的组件
(各种有特殊技能的工人)协助生产bean(手机),比如zzz组件能够支持读取
xml里带有ENC(xxx)属性(这是jasypt组件约定的加密后的属性形式)的属性字符
串转成bean的正常属性。
4、BeanFactoryPostProcessor概念
BeanFactory后置处理器,查看该方法doc可知该类的对象用于当BeanFactory实例
化之后,框架提供一个时机(spring框架在实例化BeanFactory后调用BeanFactory
后置处理器的postProcessBeanFactory(beanfactory对象)方法)满足开发者修改
BeanFactory的个性化需求,比如CustomEditorConfigurer的postProcessBeanFactory
方法里给beanFactory增加新的PropertyEditorRegistrar组件。
注:定义若干这种后置处理器,能实现给beanfactory增加自定义组件的功能。
5、BeanDefinitionRegistry概念
BeanFactory还有一个角色就是作为BeanDefinitionRegistry概念,该概念提供的
最有用方法是注册BeanDefinition--->registerBeanDefinition方法。
注:可以认为一开始beanFactory既有getBean(xxx)方法又有
registerBeanDefinition方法,后来拆分成两个接口。也可以认为作者单纯
就是想给beanfactory起个艺名叫BeanDefinitionRegistry,社会上知道该名字
的人只会知道BeanDefinitionRegistry下的方法即注册BeanDefinition功能。
6、BeanDefinitionRegistryPostProcessor概念
BeanDefinitionRegistry后置处理器,通过doc可知该后置处理器扩展自
BeanFactoryPostProcessor概念,该后置处理器用于调用beanfactory的另一个角色
BeanDefinitionRegistry概念来实现自定义注册BeanDefinition的个性化需求。
注:定义若干这种后置处理器,能实现往beanfactory增加自定义BeanDefinition的功能。
7、BeanPostProcessor概念
Bean后置处理器,通过doc可知该后置处理器用于修改实例化前后的bean,比如
给bean套一层代理对象或修改bean的属性值。
注:定义若干这种后置处理器,能实现个性化Bean的功能。
总结:上面BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor
、BeanPostProcessor分别实现给beanFactory增加自定义帮助实例化bean的组件、
往beanFactory增加自定义BeanDefinition、个性化修改bean三种功能,满足实例化
bean过程的方方面面。spring框架在实例化bean时会调用这三类概念的对象来
实现预定的个性化需求功能。