Java Config在多个配置类中使用相同的注释bean

时间:2016-11-13 02:05:15

标签: java spring spring-java-config

我正在尝试从xml切换到java配置。

我们有一个核心库,然后是使用核心库的实现。我们在每个实现中都有webapp和cli。我试图模块化配置。我们对某些包使用组件扫描。我在配置类中遇到循环依赖问题。我需要将相同的@Component注入到在多个java配置类中创建的bean中。我的配置如下:

@Configuration
@ComponentScan(basePackages = {"my.components"})
@ImportResource({
        "classpath:data-access-config.xml"
})
@PropertySource(value = "classpath:core.props", ignoreResourceNotFound = true)
public class CoreAppConfig {
    @Autowired
    Environment env;

    @Autowired
    ComponentBean bean;

    @Bean
    public MyBean myBean() {
        return new MyBean(bean);
    }
}


@Configuration
@Import({CoreAppConfig.class})
@PropertySource(value = "classpath:my-app.props")
public class MyAppConfig {
    @Autowired
    Environment env;

    @Autowired
    ComponentBean bean;

    @Bean
    public MyBean2 myBean2() {
        return new MyBean2(bean);
    }
}


@Configuration
@ComponentScan(basePackages = {"my.app.services"})
@Import({MyAppConfig.class, CoreAppConfig.class})
public class MyWebAppConfig {
    @Autowired
    Environment env;

    @Autowired
    MyAppConfig myAppConfig;

    @Autowired
    ComponentBean bean;

    @Bean
    public MyRestService myRestService() {
        return new MyRestService(bean);
    }
}

解决这个问题的最佳方法是什么?

1选项是不使用组件扫描。其他

编辑:

我得到的异常是BeanCurrentlyInCreationException。如果我从MyAppConfig中删除@Import({CoreAppConfig.class})或@Autowired ComponentBean Bean,问题就会消失。

编辑2:

所以我认为这是特定bean的循环依赖问题。我可以用其他bean做我想做的事,只有这个特定的bean给我带来了问题。

有关确定循环依赖的任何提示吗?

编辑3:

好的,所以我找出了罪魁祸首。在CoreAppConfig中,我创建了一个Bean MyPropsBean 。然后在MyAppConfig中,我创建了相同的 MyPropsBean 。我希望用 MyAppConfig.MyPropsBean 覆盖 CoreAppConfig.MyPropsBean 。我认为这导致了这个问题,因为 CoreAppConfig MyAppConfig 会自动装配 ComponentBean 。我该如何解决这个问题?什么是覆盖bean的最佳方式?

1 个答案:

答案 0 :(得分:0)

所以我通过将MyAppConfig bean的创建移动到单独的配置类来解决这个问题。然后我使用@PropertySources并创建传递动态参数的MyAppConfig bean。