gpt4 book ai didi

java - 为什么@Autowired 按类连接?

转载 作者:行者123 更新时间:2023-11-30 07:21:18 24 4
gpt4 key购买 nike

如果每个 bean 都有名称,那么我们有 getBean()方法,它接收 bean 名称,并且在 XML 配置中我们也按名称注入(inject) bean,那么为什么在 Java 配置中我们仅限于按类连接的 @Autowired 注释?

将 Bean 从一种配置注入(inject)另一种配置的传统方法是什么?是否可以通过名称引用bean而不使用@Qualifier

更新

我找到了一种在配置之间按名称 Autowiring 的方法。

首先,我按类 Autowiring 整个配置:

@Autowired
MySeparateConfig mySeparateConfig;

然后我只需从该 bean 调用实例化方法:

@Bean
MyDependentBean myDependentBean() {
MyDependentBean ans = new MyDependentBean();
ans.setProperty( mySeparateConfig.myNamedBeanInDifferentConfig() );
return ans;
}

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

最佳答案

其实,通过注解注入(inject)bean的方式有很多种。

假设我们有这个 bean

<bean id="standardPasswordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

据我所知,在java类中我们可以使用以下方法来注入(inject)它

@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 Autowiring 默认是按类型的原因,并且也想知道为什么。我认为按类型 Autowiring 是危险的。希望这会对您有所帮助。

关于java - 为什么@Autowired 按类连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37521884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com