Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
当Springbean是单例时,何时将其声明为私有静态? 将bean声明为静态或非静态的影响是什么 声明静态方法时,不能访问bean,因为bean不是静态的_Spring - Fatal编程技术网

当Springbean是单例时,何时将其声明为私有静态? 将bean声明为静态或非静态的影响是什么 声明静态方法时,不能访问bean,因为bean不是静态的

当Springbean是单例时,何时将其声明为私有静态? 将bean声明为静态或非静态的影响是什么 声明静态方法时,不能访问bean,因为bean不是静态的,spring,Spring,有人能解释一下吗 谢谢。如果将bean声明为静态,那么您的意思是 @Bean public static MyBean myBean() { return new MyBean(); } 这样做的好处是在实例方法bean之前生成bean。例如,您可以将其用于BeanFactoryPostProcessor,该处理器声明: 应用程序上下文可以在中自动检测BeanFactoryPostProcessor bean 它们的bean定义并在任何其他bean得到之前应用它们 创造 SpringJ

有人能解释一下吗

谢谢。

如果将bean声明为静态,那么您的意思是

@Bean
public static MyBean myBean() {
    return new MyBean();
}
这样做的好处是在实例方法bean之前生成bean。例如,您可以将其用于
BeanFactoryPostProcessor
,该处理器声明:

应用程序上下文可以在中自动检测BeanFactoryPostProcessor bean 它们的bean定义并在任何其他bean得到之前应用它们 创造

SpringJava的配置方法是在剩下的bean之前自动检测和初始化它们,即使用静态方法声明和初始化它们。比如说,

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}
Spring将检测到
propertysourcesplaceconfigurer
是一个
BeanFactoryPostProcessor
,并将其用于

[解析]${…}bean定义属性值中的占位符 以及针对当前Spring环境及其应用程序的@Value注释 一组属性资源


因为这些bean应该在其他bean之前初始化,使用实例方法,无法访问它们,所以您的第二点是没有意义的。

用代码向我们展示“将bean声明为静态”的含义。我指的是以下内容:public sample{@Autowired private static propertysourcesplaceplaceconfigurer;…在静态方法和非静态方法中内部使用bean。}如果我没有声明为静态的,那么我就不能在静态方法中使用bean。因此我想知道声明的区别及其好处
@bean
声明为
静态的方法或不声明为
静态的方法都将创建最终在应用程序上下文中的对象。将它们声明为<代码>静态
首先是将它们放入应用程序上下文中。因此这与它们的生命周期有关。您将声明为
静态
的bean通常不需要能够使用其他bean(将声明为实例方法),所以这不重要。当我声明为静态时,问题是自动连线不起作用。bean在应用程序代码中内部返回null。所以我的问题是,当bean是单态时,它是否重要?您将不得不在配置中发布另一个问题。这与上的
static
修饰符无关
@Bean
声明。