我有一个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中查看更多详细信息。

10-06 10:14