Java Spring引导使用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

我想: 1.init bean工厂(如果找不到值,则可能为null) 2.自动连接并由bean绑定使用

但现在我有个例外

@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");
}