【问题标题】:How to load beans based on custom properties如何根据自定义属性加载 bean
【发布时间】:2016-11-17 22:09:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: spring properties configuration spring-boot configuration-files


    【解决方案1】:

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

    【讨论】:

    • 感谢您的建议,我会尝试这种方法。不幸的是,我将这个概念构建为 Spring 和 Spring Boot 应用程序的内部库。基于 Spring 的应用程序(没有 Spring Boot 的旧版)是否有类似的东西?
    • 如果你实现了一个常规的 Spring 应用程序,你将负责加载上下文。所以只需在上下文刷新之前编写一些自定义环境的代码。 This issue 可能是相关的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2018-02-26
    相关资源
    最近更新 更多