如果每个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;
}
根据定义,配置属于不同的类别。
答案 0 :(得分:1)
实际上,有几种方法可以通过注释注入bean。
鉴于我们有这个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;
或使用spEL
@Value(#{standardPasswordEncoder}) // by bean id
StandardPasswordEncoder standardPasswordEncoder;
但是,我不知道spring autowired default的原因是类型,也不知道为什么。我认为通过类型自动装配是危险的。希望这会对你有所帮助。