[英]Understanding Spring4 annotation beans
第一次使用帶有注釋的Spring。 我試圖像這樣定義一個單例豆:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但是我覺得這不是正確的方法,因為每次都會返回一個“新” bean。 我應該改為定義如下嗎?
@Bean
public ActionProducer actionProducer() {
if (bean==null)
bean=new ActionProducer();
return bean
}
提前致謝。
對於每個@Configuration
類,Spring將創建一個代理來控制對這些@Bean
方法的調用。 因此,如果您有一個@Bean
方法,該方法應該創建一個單例bean(如果未指定其他作用域,則默認情況下會這樣做),代理將確保該方法僅被調用一次才能創建bean。 代理將攔截所有進一步的調用,並將返回已經存在的bean。
這樣,如果您在該類中有其他依賴於它的bean,而無需考慮范圍,重復實例等,甚至可以調用該bean方法:
@Bean
public AnotherClass anotherClass() {
return new AnotherClass(actionProducer());
}
因此,不要繞過Spring功能,而只能實現以下方法:
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
據我所知, @Bean
是單身,是的,因此返回new ActionProducer();
很好 它只會在啟動時由Spring調用一次 。
如果ActionProducer
是您自己的實現,則只需使用@Component
注釋類。
默認情況下,將其視為單例,就像普通的注釋方式或xml方式一樣。 如果需要其他作用域,則可以在方法上使用作用域注釋。
參考https://www.quora.com/Is-any-method-annotated-with-Bean-processor-as-Singleton-by-Spring-Framework
@Bean注釋使您可以在Spring應用程序上下文中定義Bean。 默認情況下,Spring將bean創建為單例。 所以這段代碼將在Spring上下文中產生一個單例
@Bean
public ActionProducer actionProducer() {
return new ActionProducer();
}
但是您需要通過Application上下文訪問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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.