Java Spring引导使用bean内部配置
我想: 1.init bean工厂(如果找不到值,则可能为null) 2.自动连接并由bean绑定使用 但现在我有个例外Java Spring引导使用bean内部配置,java,spring,spring-boot,autowired,Java,Spring,Spring Boot,Autowired,我想: 1.init bean工厂(如果找不到值,则可能为null) 2.自动连接并由bean绑定使用 但现在我有个例外 @Configuration @AutoConfigureOrder() @ComponentScan("scanPath") public class AutoConfiguration { @Autowired private Factory factory; @Bean("factory") @ConditionalOnP
@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");
}
}
所以我想要的是在装订中使用工厂,如何制作?谢谢 使用getFactory()
获取Bean(并删除@Autowired
):
在签名中连接工厂,现在Spring发现绑定需要工厂并为您设置:
public Binding getMarketingDataSource() {
return getFactory().getInstance("bindingName");
循环依赖是错误设计的结果。您可以只使用
getFactory
或使用Factory
作为方法参数。你不需要自动连线它。自动布线失败,因为您正在将其注入到创建它的配置中。注入bean需要在那里并创建有效的@Configuration
需要bean,因此需要循环依赖关系。还有一个问题,如果我使用getFactory()有多个bean,那么我将初始化多个工厂实例,对吗?@stephelin你能问一个新问题并提供具体细节吗?欢迎。顺便说一句,此解决方案不会为每次使用/绑定创建新工厂。默认情况下,它将只使用一个。
public Binding getMarketingDataSource() {
return getFactory().getInstance("bindingName");
@Bean("binding")
public Binding getMarketingDataSource(Factory factory) {
return factory.getInstance("bindingName");
}