- 将 bean 声明为静态或非静态有什么影响?
- 声明静态方法时,无法访问 bean,因为 bean 不是静态的。
有人可以解释一下吗?
谢谢。
如果通过将 bean 声明为 static,您的意思是
@Bean
public static MyBean myBean() {
return new MyBean();
}
那么这样做的好处是让您的 bean 在实例方法 bean 之前生成。例如,您可以将BeanFactoryPostProcessor
其与以下状态一起使用:
应用程序上下文可以在其 bean 定义中自动检测 BeanFactoryPostProcessor bean,并在创建任何其他 bean 之前应用它们。
在其余 bean 之前自动检测和初始化这些的 Spring Java 配置方法是使用静态方法声明和初始化它们。例如,
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Spring 将检测到这PropertySourcesPlaceholderConfigurer
是 aBeanFactoryPostProcessor
并将使用它来
[解决] bean 定义属性值中的 ${...} 占位符和针对当前 Spring Environment 及其一组 PropertySources 的 @Value 注释。
因为这些 bean 应该在其他 bean 之前初始化,使用实例方法,没有必要访问它们,所以你的第二点是没有意义的。