[英]Why @Autowired wires by class?
如果每個 bean 都有名稱,並且我們有getBean()
方法,它接收 bean 名稱,並且在 XML 配置中我們也按名稱注入 bean,那么為什么在 Java 配置中我們僅限於按類連接的@Autowired
注釋?
將 bean 從另一種配置注入一種配置的常規方法是什么? 是否可以按名稱引用 bean 而不是使用@Qualifier
?
更新
我找到了一種在配置之間按名稱自動裝配的方法。
首先,我按類自動裝配整個配置:
@Autowired
MySeparateConfig mySeparateConfig;
然后我只是從那個 bean 調用實例化方法:
@Bean
MyDependentBean myDependentBean() {
MyDependentBean ans = new MyDependentBean();
ans.setProperty( mySeparateConfig.myNamedBeanInDifferentConfig() );
return ans;
}
根據定義,配置屬於不同的類。
實際上,通過注解注入bean的方式有很多種。
鑒於我們有這個豆
<bean id="standardPasswordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />
在java類中,據我所知,我們可以使用以下方式注入它
@Autowired // by type
StandardPasswordEncoder standardPasswordEncoder;
@Autowired
@Qualifier("standardPasswordEncoder") // by bean id
StandardPasswordEncoder standardPasswordEncoder;
javax.annotation.@Resource // by bean id
StandardPasswordEncoder standardPasswordEncoder;
javax.inject.@Inject // by type
StandardPasswordEncoder standardPasswordEncoder;
或使用拼寫
@Value(#{standardPasswordEncoder}) // by bean id
StandardPasswordEncoder standardPasswordEncoder;
但是,我也不知道 spring 自動裝配默認值是按類型的原因,也想知道為什么。 我認為按類型自動裝配很危險。 希望這會幫助你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.