簡體   English   中英

如何以bean定義方法獲取spring bean

[英]How to get a spring bean in a bean-defining method

我有一個Java配置,其中ServiceB取決於ServiceA:

@Bean
ServiceA getServiceA() { return new ServiceA(); }
@Bean
ServiceB getServiceB() { return new ServiceB(getServiceA()); }

然后,我想將ServiceA(但沒有ServiceB)聲明為組件。 我將@ScanPackage添加到配置並注釋ServiceA:

@Component
class ServiceA { .. }

現在如何聲明方法getServiceB()

Spring為Bean定義方法按類型自動注入方法參數:

@Bean
ServiceB getServiceB(ServiceA serviceA) {
    return new ServiceB(serviceA);
}

現在,您不必擔心如何提供ServiceA

正如Rohan在他的答案中所寫,Spring的@Bean注釋可以注入其他Spring bean的依賴項,就像基於構造函數的依賴項注入一樣。

我只想補充一點,在java config中定義bean時,還有其他可能性可以進行依賴注入。 與其他任何Spring bean一樣, @Configuration注釋的類是Spring bean,因此您可以像通常在Spring中那樣自動@Bean依賴項,然后在定義@Bean時使用此依賴@Bean ,例如:

@Autowired
private ServiceA serviceA;

@Bean
public ServiceB getServiceB() {
    return new ServiceB(serviceA);
}

從Spring Framework 4.3開始,您還可以在@Configuration類中進行構造函數注入-這是注入依賴關系的另一種方法。

spring文檔中查看更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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