我想添加一个自定义PropertySource(类,而不是注释)。注释是不够的,因为它只处理文件源。自动配置春天引导添加PropertySource
工作的方法是定义自己的ApplicationContextInitializer并向META-INF/spring.factories添加适当的声明。 ApplicationContextInitializer只是使用: Environment.getPropertySources().addLast(...)
但也有一些缺点,主要表现在:
- 它总是运行,但最好的行为是只如果某些条件得到满足运行(@ConditionalOnClass等)
如何实现这一目标?理想情况下,我会使用@Condition ... annotations编写自动配置,并在里面声明这样的初始化程序(最好是Ordered)。
编辑: 在我的特殊情况下,我想定义Archaius PolledConfigurationSource,但只有当Archaius是在类路径上 - 这就是为什么我想一起向监听器上的事件在生命周期很早就使用@ConditionalOnClass。
我不明白这有助于。如果我想通过包含/不包括jar来启用/禁用archaius配置,那么我可以创建一个只启用archaius集成的弹簧自动配置jar。事情就是这样做春天的方式 - 使其工作,如果任何依赖拉入archaius(如@ConditionalOnClass为豆)。 – mabn