从Spring @Bean
javadoc复制:
BeanFactoryPostProcessor-返回@Bean方法
对于返回Spring
BeanFactoryPostProcessor(BFPP)类型的@Bean方法,必须特别注意。因为BFPP对象必须在容器生命周期的早期实例化,所以它们会干扰@Configuration类中的@
Autowired,@
Value和@PostConstruct之类的注释的处理。为了避免这些生命周期问题,请将BFPP返回的@Bean方法标记为静态。例如:
@Bean public static PropertyPlaceholderConfigurer ppc() { // instantiate, configure and return ppc ... }通过将此方法标记为静态,可以在不引起其声明@Configuration类实例化的情况下调用该方法,从而避免了上述生命周期冲突。但是请注意,如上所述,静态@Bean方法不会针对范围和AOP语义进行增强。这在BFPP情况下可行,因为其他@Bean方法通常不引用它们。提醒一下,将为具有返回类型可分配给BeanFactoryPostProcessor的任何非静态@Bean方法发出WARN级别的日志消息。



