Spring 引导使用bean inside configuration
Spring boot use bean inside configuration
@Configuration
@AutoConfigureOrder()
@ComponentScan("scanPath")
public class AutoConfiguration {
@Autowired
private Factory factory;
@Bean("factory")
@ConditionalOnProperty(prefix = "application.middleware", name = "enabled", havingValue = "true")
public Factory getFactory() {
return new Factory();
}
@Bean("binding")
@DependsOn("factory")
public Binding getMarketingDataSource() {
return factory.getInstance("bindingName");
}
}
我想:
1. init bean factory(如果没有找到值可以为空)
2. 由 bean 绑定自动装配和使用
但现在我遇到异常
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'factory': Requested bean is currently in creation: Is there an unresolvable circular reference?
所以我想要的是在绑定中使用工厂,如何实现?谢谢!
使用getFactory()
获取Bean(并删除@Autowired
):
public Binding getMarketingDataSource() {
return getFactory().getInstance("bindingName");
在签名中连接工厂,现在Spring看到绑定需要工厂并为您设置它:
@Bean("binding")
public Binding getMarketingDataSource(Factory factory) {
return factory.getInstance("bindingName");
}
@Configuration
@AutoConfigureOrder()
@ComponentScan("scanPath")
public class AutoConfiguration {
@Autowired
private Factory factory;
@Bean("factory")
@ConditionalOnProperty(prefix = "application.middleware", name = "enabled", havingValue = "true")
public Factory getFactory() {
return new Factory();
}
@Bean("binding")
@DependsOn("factory")
public Binding getMarketingDataSource() {
return factory.getInstance("bindingName");
}
}
我想: 1. init bean factory(如果没有找到值可以为空) 2. 由 bean 绑定自动装配和使用
但现在我遇到异常
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'factory': Requested bean is currently in creation: Is there an unresolvable circular reference?
所以我想要的是在绑定中使用工厂,如何实现?谢谢!
使用getFactory()
获取Bean(并删除@Autowired
):
public Binding getMarketingDataSource() {
return getFactory().getInstance("bindingName");
在签名中连接工厂,现在Spring看到绑定需要工厂并为您设置它:
@Bean("binding")
public Binding getMarketingDataSource(Factory factory) {
return factory.getInstance("bindingName");
}