容器拓展点

给容器配置特别的逻辑

通过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“)
获得实现FactoryBeanmyBean实例而不是它生产的bean。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注