如果太多的bean @Condition测试为假,则不会增强配置类

时间:2019-01-04 16:17:02

标签: spring spring-transactions spring-config

我正在开发一个在WildFly-10下运行的系统,该系统由许多不同的组件组成,可以使用@Conditional批注通过配置属性启用或禁用这些组件。我发现的问题是,如果@Configuration禁用了过多的@Conditional类,则在对ConfigurationClassPostProcessor.processConfigBeanDefinitions()的调用期间不会增强其余@Configuration类。我使用的是Spring 4.3.10.RELEASE版本,以匹配WildFLy-10.0.Final使用的版本。

例如,在调用processConfigBeanDefinitions()的一种设置中, beanDefinitionMap 包含62个元素。调用this.reader.loadBeanDefinitions()后, beanDefinitionMap 包含61个元素。这会导致测试registry.getBeanDefinitionCount() > candidateNames.length失败,因此不会增强新创建的@Configuration类。尝试为使用NullPointerException注释的配置类创建transactionAdvisor时,这会进一步导致@EnableTransactionManagement,因为该注释未处理。

我的解决方法是在始终加载的@Configuration类中创建更多bean,但是如果我不得不诉诸于创建虚拟bean,这不是一个很好的解决方案。还有另一种解决方法吗?在更高版本的Spring中已解决此问题吗?

0 个答案:

没有答案