我有一个Java配置,其中ServiceB取决于ServiceA:
@Bean
ServiceA getServiceA() { return new ServiceA(); }
@Bean
ServiceB getServiceB() { return new ServiceB(getServiceA()); }
然后,我想将ServiceA(但没有ServiceB)声明为组件。我将
@ScanPackage
添加到配置并注释ServiceA:@Component
class ServiceA { .. }
现在如何声明方法
getServiceB()
? 最佳答案
正如Rohan在他的answer中所写的那样,Spring的@Bean
注释可以注入其他Spring bean的依赖项,就像基于构造函数的依赖项注入一样。
我只想补充一点,在java config中定义bean时,还有其他可能性可以进行依赖注入。和其他任何Spring bean一样,@Configuration
带注释的类是一个Spring bean,因此您可以像通常在Spring中那样自动关联依赖项,然后在定义@Bean
时使用此依赖项,例如:
@Autowired
private ServiceA serviceA;
@Bean
public ServiceB getServiceB() {
return new ServiceB(serviceA);
}
从Spring Framework 4.3开始,您还可以在
@Configuration
类中进行构造函数注入-这是注入依赖关系的另一种方法。在spring documentation中查看更多详细信息。