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

How to get a spring bean in a bean-defining method

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

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

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

@Component
class ServiceA { .. }

现在如何声明方法getServiceB()

Spring auto-injects 定义方法的 Bean 类型的方法参数:

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

现在你不用担心ServiceA是如何提供的了。

正如 Rohan 在他的 中所写的那样,Spring 的 @Bean 注释可以注入其他 Spring bean 的依赖项,其方式与 [=25] 相同=]依赖注入确实如此。

我只想补充一点,在 java 配置中定义 bean 时,还有其他可能进行依赖注入。 @Configuration 注释 class 是一个 Spring bean 和任何其他 Spring bean 一样,所以你可以 auto-wire 一个依赖项,就像通常在 Spring 中所做的那样然后在定义 @Bean 时使用此依赖项,例如:

@Autowired
private ServiceA serviceA;

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

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

spring documentation 中查看更多详细信息。