Java 弹簧静力法
我正在学习Spring,我正在读的书有以下代码行Java 弹簧静力法,java,spring,static,Java,Spring,Static,我正在学习Spring,我正在读的书有以下代码行 @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } 为什么需要static关键字,在静态方法上声明@Bean注释是否正常,如果是,原因是什么?属性资源占位符配置器对象是BeanFactoryPostProcessor,因
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
为什么需要static关键字,在静态方法上声明
@Bean
注释是否正常,如果是,原因是什么?属性资源占位符配置器对象是BeanFactoryPostProcessor
,因此,根据:
必须特别考虑返回的@Bean
方法
SpringBeanFactory后处理器(BFPP)类型。因为BFPP对象
必须在容器生命周期的早期实例化,它们可以
干扰注释的处理,例如@Autowired
,@Value
,
以及@Configuration
类中的@PostConstruct
。为了避免这些
生命周期问题,将BFPP返回的@Bean
方法标记为static
通过将此方法标记为静态,可以调用它而不会导致
实例化其声明的@Configuration
类,从而避免
上述生命周期冲突。但是请注意,静态@Bean
对于作用域和AOP语义,方法将不会得到增强
如上所述。这适用于BFPP案例,因为它们不是
通常由其他@Bean
方法引用。作为提醒,一个
将为任何非静态@Bean
方法发出警告级别日志消息
具有可分配给BeanFactoryPostProcessor
的返回类型
可能会有帮助。该特定类型需要它,因为“占位符”系统用于填充表达式,如${server.port}
。它被用于引导整个配置,所以在所有的事情都要开始之前,它是可用的。除了你正在阅读的书之外,还考虑其他的真实来源,比如Spring官方参考文档。