Aware接口
- BeanNameAware
- BeanFactoryAware
- ApplicationContextAware
BeanFactory和FactoryBean的区别
- BeanFactory:工厂,是ioc容器的基础,可以管理和创建任意类型的对象;
- FactoryBean:特殊的bean,存在于ioc容器中,也就是存在于BeanFactory。FactoryBean只能针对某一类bean进行存储。
- 通过BeanFactory去管理的bean实例,都需要在xml中或者注解方式进行配置;
- 如果一个bean装配过程特别复杂,那么xml配置可能很复杂,对于这种情况,spring提供了一个专门针对复杂的bean进行生产的对象,就是FactoryBean,FactoryBean只能针对某一类bean进行创建;
- BeanFactory可以创建任意对象
BeanFactoryPostProcessor和BeanPostProcessor的区别
- BeanFactoryPostProcessor:执行时机,在BeanDefinition未被用来创建之前,可以针对BeanDefinition进行修改,比如PropertyPlaceholderConfigurer(context:property-placeholder),就是实现了BeanFactoryPostProcessor,那么该类就对BeanDefinition进行了修改,具体的修改:判断BeanDefinition中的属性值是否带有${},如果带有,则根据其他的key获取properties配置文件中的value值,进行替换;
- BeanPostProcessor:执行时机,在bean已经被创建完成属性填充,在bean初始化的时候被调用。初始化之前和初始化之后。比如AbstractAspectJAutoProxyCreator就实现了BeanPostProcessor,它的作用就是对已经创建的bean进行aop切面操作。