我想添加一个自定义PropertySource(类,而不是注释)。注释是不够的,因为它只处理文件源。
有效的方法是定义自己的ApplicationContextInitializer并向META-INF / spring.factories添加适当的声明。 ApplicationContextInitializer只使用:
Environment.getPropertySources().addLast(...)
但是有一些缺点,主要是:
如何实现?理想情况下,我会使用@Condition ...注释编写我的自动配置,并在内部声明这样的初始化程序(最好是有序的)。
编辑: 在我的特定情况下,我想定义Archaius PolledConfigurationSource,但只有当Archaius在类路径上时 - 这就是为什么我想在生命周期的早期就将@ConditionalOnClass与一个监听器一起使用。
答案 0 :(得分:1)
你可以有一个中介类 - 你的应用程序的一部分,我们称之为“ProviderConfigurer” - 其目标是加载一个服务(打包在一个单独的jar中,使用META-INF / services / targetSPi)将加载Archaius。 因此,要激活Archaius,您必须放置2个罐而不是1个,但随后ProviderConfigurer将能够加载服务提供的属性源(API将成为您必须定义的接口的一部分......)任何在类路径中被发现,并且如果服务没有找到任何实现您将为此目的定义的SPI的类,则不执行任何操作。