为什么@Autowired连线?

时间:2016-05-30 09:15:05

标签: java spring

如果每个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;
}

根据定义,配置属于不同的类别。

1 个答案:

答案 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的原因是类型,也不知道为什么。我认为通过类型自动装配是危险的。希望这会对你有所帮助。