0
  1. 将 bean 声明为静态或非静态有什么影响?
  2. 声明静态方法时,无法访问 bean,因为 bean 不是静态的。

有人可以解释一下吗?

谢谢。

4

1 回答 1

2

如果通过将 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 之前初始化,使用实例方法,没有必要访问它们,所以你的第二点是没有意义的。

于 2013-08-06T13:39:52.770 回答