[英]How dependency injection in Spring is working in this statement?
我正在學習 Spring 中的依賴注入,我有以下代碼:
@Autowired
private CamelContext context;
@Autowired
private Environment environment;
@Autowired
protected CamelContext createCamelContext(){
return context;
}
...
}
我知道上下文和環境 bean 被注入到這個 class 中,但我不明白這段代碼到底注入了什么:
@Autowired
protected CamelContext createCamelContext(){
return context;
}
我不明白這種注入。 這里到底發生了什么? 這個方法注入和這個沒有注入的簡單方法有什么區別:
protected CamelContext createCamelContext(){
return context;
}
任何反饋將不勝感激! 謝謝!
在這種情況下,@ @Autowired
幾乎等同於createCamelContext
上的@Bean
和context
上的@Inject
。 如果您不提供@Qualifier
,則自動裝配 bean 按類型發生,因此您的代碼基本上將采用您的@Autowired/@Inject CamelContext context
和 go 尋找CamelContext
來填充缺失值,它將按照@Autowired/@Bean createCamelContext
提供的方式找到@Autowired/@Bean createCamelContext
。
帶注釋的createCamelContext
和未注釋的區別在於 Spring 在其 Bean 中沒有該方法,因此在尋找@Bean
到@Inject
時找不到該方法。
在您的特定情況下,值context
會尋找CamelContext
,並以createCamelContext
的形式找到一個。 此時createCamelContext
查找context
的值,即null
。 它返回這個值,該值被注入到context
。 因此,在任何時間點,引用context
或createCamelContext
應該總是產生null
。
使用@Autowired
的方法要么是setter 要么是config 方法。 它們在 bean 創建后調用,可用於初始化。 這些方法的所有arguments都會被Spring自動注入。 從 Spring javadoc :
自動裝配方法
配置方法可以具有任意名稱和任意數量的 arguments; 每個 arguments 都將與 Spring 容器中的匹配 bean 自動裝配。 Bean 屬性設置方法實際上只是這種通用配置方法的一個特例。 這樣的配置方法不必是公開的。
但是在您的情況下, createCamelContext()
沒有 arguments 並且也沒有初始化。 所以我看不出有任何理由聲明這個方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.