Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧静力法_Java_Spring_Static - Fatal编程技术网

Java 弹簧静力法

Java 弹簧静力法,java,spring,static,Java,Spring,Static,我正在学习Spring,我正在读的书有以下代码行 @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } 为什么需要static关键字,在静态方法上声明@Bean注释是否正常,如果是,原因是什么?属性资源占位符配置器对象是BeanFactoryPostProcessor,因

我正在学习Spring,我正在读的书有以下代码行

@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

为什么需要static关键字,在静态方法上声明
@Bean
注释是否正常,如果是,原因是什么?

属性资源占位符配置器对象是
BeanFactoryPostProcessor
,因此,根据:

必须特别考虑返回的
@Bean
方法 Spring
BeanFactory后处理器(BFPP)类型。因为BFPP对象
必须在容器生命周期的早期实例化,它们可以
干扰注释的处理,例如
@Autowired
@Value
, 以及
@Configuration
类中的
@PostConstruct
。为了避免这些 生命周期问题,将BFPP返回的
@Bean
方法标记为
static

通过将此方法标记为静态,可以调用它而不会导致 实例化其声明的
@Configuration
类,从而避免 上述生命周期冲突。
但是请注意,静态
@Bean
对于作用域和AOP语义,方法将不会得到增强 如上所述。这适用于BFPP案例,因为它们不是 通常由其他
@Bean
方法引用。作为提醒,一个 将为任何非静态
@Bean
方法发出警告级别日志消息 具有可分配给
BeanFactoryPostProcessor
的返回类型


可能会有帮助。该特定类型需要它,因为“占位符”系统用于填充表达式,如
${server.port}
。它被用于引导整个配置,所以在所有的事情都要开始之前,它是可用的。除了你正在阅读的书之外,还考虑其他的真实来源,比如Spring官方参考文档。