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