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

Java Config same annotation bean in multiple config classes

我正在尝试从 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。我认为这是导致问题的原因,因为 CoreAppConfigMyAppConfig 都自动装配 ComponentBean。我该如何解决这个问题?覆盖 bean 的最佳方法是什么?

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