如何根据自定义属性加载bean

How to load beans based on custom properties

我有 PropertySourcesPlaceholderConfigurer 的自定义实现,我用它来加载额外的 属性 源并将它们放在不同的位置(一个在末尾,一个在 systemProperties 之前)。因此可以在不同级别覆盖属性。

根据某些属性,我需要加载一组 bean。为此,我正在实施 ImportBeanDefinitionRegistrar.

不幸的是 ImportBeanDefinitionRegistrarPropertySourcesPlaceholderConfigurer 之前执行。 我也尝试使用 @ConditionalOnProperty,结果相同。 PropertySourceFactory 是在早期开始执行的,但那时我无法定位那些额外的 属性 来源。

有没有办法在 ImportBeanDefinitionRegistrar 之前或 Spring 生命周期的早期以自定义顺序添加额外的 PropertySource

这里我有sandbox app来玩这个概念。 实际上,我在 Spring 和 Spring 引导应用程序的内部库中有这个,以启用具有属性的附加功能。

您应该实施 EnvironmentPostProcessor 并将 属性 来源的所有逻辑移到那里。您当前的项目已损坏,因为您无法保证 @PropertySource 会提前处理(实际上不会)。