如何在 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 中查看更多详细信息。
我有一个 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 在他的 @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 中查看更多详细信息。