我正在尝试从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的最佳方式?答案 0 :(得分:0)
所以我通过将MyAppConfig bean的创建移动到单独的配置类来解决这个问题。然后我使用@PropertySources并创建传递动态参数的MyAppConfig bean。