通过BeanPostProcessor
接口定制bean:可以设置自己的初始化/依赖解析逻辑等。
当然,实现这个接口的类也要被注册成bean,不然无法工作。
容器将bean实例化、设置好属性、初始化之后调用。
可以设置多个实现,还能实现Ordered接口确定每个实现的调用顺序。
BeanPostProcessor的作用域为单个容器,即使容器之间相互继承也不行。
由于AOP自动代理也是由BeanPostProcessor实现,
BeanPostProcessor实例或者它们直接引用的bean都没有资格被自动装配。
通过BeanFactoryPostProcessor
接口操纵配置元数据:在容器实例化其它非BeanFactoryPostProcessor
的bean之前读取或者修改元数据。
同样可以实现Ordered接口以设置多个实现。
通过BeanFactoryPostProcessor
修改bean会导致bean过早实例化,违反标准容器生命周期,可能会导致一些副作用,如跳过BeanPostProcessor处理。BeanFactoryPostProcessor
也是单容器作用域。
没必要将BeanFactoryPostProcessor
设置成lazy-init,如果没有bean引用它,那就不会初始化。
通过FactoryBean
实例化定制实例化逻辑:将实现它的bean作为工厂。
容器的可插拔功能点,用于复杂的初始化代码。
通过容器获得FactoryBean
实例而不是它生产的bean:添加一个‘&‘前缀:
getBean(“&myBean“)
获得实现FactoryBean
的myBean实例而不是它生产的bean。