我最近开始在一个使用Spring配置而不是XML的地方工作,到目前为止,我很喜欢它。
我的问题如下:
如果我们有一个@Configuration
带注释的类A导入另一个@Configuration
带注释的类B,那么在A中定义的bean依赖于在B中定义的bean的正确,类型安全的方法是什么? 。
这是我在博客(https://blog.codecentric.de/en/2012/07/spring-dependency-injection-styles-why-i-love-java-based-configuration/)中看到的一个例子:
@Configuration
public class PartnerConfig {
@Bean
public PartnerService partnerService() {
return new PartnerServiceImpl();
}
}
@Configuration
@Import(PartnerConfig.class)
public class CashingConfig {
@Autowired
private PartnerConfig partnerConfig;
@Bean
public CashingService cashingService() {
return new CashingServiceImpl(partnerConfig.partnerService());
}
}
作为我问题的第二部分,如果我要做上述操作,那么Spring会将其解释为bean依赖吗?也就是说,当我做的时候
partnerConfig.partnerService()
在上面的示例中,我是否让Spring获取partnerService
bean,或者我只是调用常规java方法并创建PartherService
的新实例(这不是我的意思)想要,因为bean应该是单身人士)?
编辑: 有人建议使用@Qualifier。这会有用吗?
@Configuration
public class PartnerConfig {
@Bean
@MyCustomQualifier
public PartnerService partnerService() {
return new PartnerServiceImpl();
}
}
@Configuration
@Import(PartnerConfig.class)
public class CashingConfig {
@Bean
public CashingService cashingService(@MyCustomQualifier PartnerService partnerService) {
return new CashingServiceImpl(partnerService);
}
}
答案 0 :(得分:1)
只需将依赖项作为参数添加到@Bean
带注释的方法中,然后删除配置的自动装配。
@Configuration
@Import(PartnerConfig.class)
public class CashingConfig {
@Bean
public CashingService cashingService(PartnerService partnerService) {
return new CashingServiceImpl(partnerService);
}
}
或只是自动装配PartnerService
而不是配置。
@Configuration
@Import(PartnerConfig.class)
public class CashingConfig {
@Autowire
private PartnerService partnerService;
@Bean
public CashingService cashingService() {
return new CashingServiceImpl(partnerService);
}
}
答案 1 :(得分:1)
请参阅以下部分:
@Configuration类中的@Bean方法
总结得很好。
通常,@ Node方法在@Configuration类中声明。在这种情况下,bean方法可以通过直接调用它们来引用同一个类中的其他@Bean方法。这可以确保bean之间的引用是强类型和可导航的。
部分:
撰写@Configuration类