了解 Spring4 注释 bean
Understanding Spring4 annotation beans
第一次使用 Spring 和注释。我正在尝试定义一个单例 bean,例如:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但我觉得这不是正确的做法,因为每次 returns 一个 "new" bean。我应该像下面这样定义吗?
@Bean
public ActionProducer actionProducer() {
if (bean==null)
bean=new ActionProducer();
return bean
}
提前致谢。
据我所知,@Bean
是单例的,因此返回 new ActionProducer();
就好了。它只会在启动时被spring 调用一次。
如果 ActionProducer
是您自己的实现,只需将 class 注释为 @Component
。
默认情况下,它被视为单例,就像在正常注释方式或xml方式中一样。如果你想要其他范围,那么你可以在方法上使用范围注释。
参考
https://www.quora.com/Is-any-method-annotated-with-Bean-treated-as-Singleton-by-Spring-Framework
对于每个 @Configuration
class,Spring 将创建一个代理来控制对这些 @Bean
方法的调用。因此,如果你有一个 @Bean
方法,它应该创建一个单例 bean(如果你没有指定另一个范围,它默认会这样做)代理将确保该方法只被调用一次来创建豆。所有进一步的调用都被代理拦截,并且已经存在的 bean 将被返回。
这样,如果 class 中有其他 bean 依赖于它,您甚至可以只调用该 bean 方法,而无需考虑作用域、重复实例等:
@Bean
public AnotherClass anotherClass() {
return new AnotherClass(actionProducer());
}
所以不要绕过 Spring 功能,只需按如下方式实现方法:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
@Bean 注释允许您将 Bean 定义到 Spring 应用程序上下文中。
默认情况下 Spring 将 bean 创建为单例。所以这段代码将在 Spring context
中产生一个单例
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但是您需要通过应用程序上下文访问 bean
applicationContext.getBean("myBeanName")
如果每次调用都需要一个 bean 实例,则需要定义 Prototype 范围。一样的,需要通过Spring应用上下文访问
@Bean(scope=DefaultScopes.PROTOTYPE)
public ActionProducer actionProducer() {
return new ActionProducer();
}
你可以在这里看到更多
http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html
第一次使用 Spring 和注释。我正在尝试定义一个单例 bean,例如:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但我觉得这不是正确的做法,因为每次 returns 一个 "new" bean。我应该像下面这样定义吗?
@Bean
public ActionProducer actionProducer() {
if (bean==null)
bean=new ActionProducer();
return bean
}
提前致谢。
据我所知,@Bean
是单例的,因此返回 new ActionProducer();
就好了。它只会在启动时被spring 调用一次。
如果 ActionProducer
是您自己的实现,只需将 class 注释为 @Component
。
默认情况下,它被视为单例,就像在正常注释方式或xml方式中一样。如果你想要其他范围,那么你可以在方法上使用范围注释。
参考 https://www.quora.com/Is-any-method-annotated-with-Bean-treated-as-Singleton-by-Spring-Framework
对于每个 @Configuration
class,Spring 将创建一个代理来控制对这些 @Bean
方法的调用。因此,如果你有一个 @Bean
方法,它应该创建一个单例 bean(如果你没有指定另一个范围,它默认会这样做)代理将确保该方法只被调用一次来创建豆。所有进一步的调用都被代理拦截,并且已经存在的 bean 将被返回。
这样,如果 class 中有其他 bean 依赖于它,您甚至可以只调用该 bean 方法,而无需考虑作用域、重复实例等:
@Bean
public AnotherClass anotherClass() {
return new AnotherClass(actionProducer());
}
所以不要绕过 Spring 功能,只需按如下方式实现方法:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
@Bean 注释允许您将 Bean 定义到 Spring 应用程序上下文中。 默认情况下 Spring 将 bean 创建为单例。所以这段代码将在 Spring context
中产生一个单例@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但是您需要通过应用程序上下文访问 bean
applicationContext.getBean("myBeanName")
如果每次调用都需要一个 bean 实例,则需要定义 Prototype 范围。一样的,需要通过Spring应用上下文访问
@Bean(scope=DefaultScopes.PROTOTYPE)
public ActionProducer actionProducer() {
return new ActionProducer();
}
你可以在这里看到更多 http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html