簡體   English   中英

了解Spring4注釋bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM