我正在开发一个在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中已解决此问题吗?