如何在bean定义方法中获取spring bean

时间:2017-02-09 09:04:18

标签: java spring javabeans

我有一个java配置,其中ServiceB依赖于ServiceA:

@Bean
ServiceA getServiceA() { return new ServiceA(); }
@Bean
ServiceB getServiceB() { return new ServiceB(getServiceA()); }

然后我想将ServiceA(但没有ServiceB)声明为组件。我将@ScanPackage添加到配置并注释ServiceA:

@Component
class ServiceA { .. }

如何现在声明方法getServiceB()

2 个答案:

答案 0 :(得分:3)

Spring为Bean定义方法按类型自动注入方法参数:

@Bean
ServiceB getServiceB(ServiceA serviceA) {
    return new ServiceB(serviceA);
}

现在您不必担心如何提供ServiceA

答案 1 :(得分:2)

正如Rohan已经在他的answer中写的那样,Spring的@Bean注释可以注入其他Spring bean的依赖关系,就像基于构造函数的依赖注入一样。

我只想补充说,在java配置中定义bean时,还有其他可能性来进行依赖注入。 @Configuration带注释的类与任何其他Spring bean一样是Spring bean,因此您可以自动连接依赖项,就像在Spring中通常一样,然后在定义@Bean时使用此依赖项,如:

@Autowired
private ServiceA serviceA;

@Bean
public ServiceB getServiceB() {
    return new ServiceB(serviceA);
}

从Spring Framework 4.3开始,您还可以在@Configuration类中进行构造函数注入 - 这是注入依赖项的另一种方法。

spring documentation中查看更多详情。