【发布时间】:2022-08-20 02:39:16
【问题描述】:
我有一个场景,我想在创建/初始化任何 bean 之前以编程方式将属性注入 Spring:
- bean(不可修改)配置为
ConditionalOnProperty,因此需要在创建之前设置属性。 - 属性需要以编程方式动态配置,而不是通过属性文件(我们调用 API 并使用结果来设置属性值)。
我看到
ApplicationContext有办法获取当前环境的属性源(通过ConfigurableEnvironment),但我不确定如何在bean 初始化之前注入Spring 生命周期来配置ApplicationContext。我知道BeanFactoryPostProcessor 是在bean 初始化之前发生的一个钩子,但是我看不到在其中获取
ApplicationContext实例的方法。如何实现?
注意:应用程序本身是 Spring Web/MVC,而不是 Spring Boot。第三方库内部使用 Spring Boot 类 (
ConditionalOnProperty)。
-
如果它不是弹簧启动,那么您将如何处理
ConditionalOnProperty,因为它来自 Spring Boot 而不是普通的弹簧。 2 是什么意思,什么是属性文件不可配置的?您将它们放在文件系统上,修改它们并启动应用程序。他们不必是应用程序的一部分吗? -
好消息...我没有意识到
ConditionalOnProperty是 Spring Boot。事实证明,我们正在使用的第三方库(来自我们的 MVC 应用程序)在内部使用 Spring Boot 类。 -
至于 #2,我们调用 API 并使用结果来设置属性值。我在澄清的问题中更新了相同的内容。
-
只需将其设为属性源或使用
ApplicationContextInitializer调用端点,准备MapPropertySource并将其添加到Environment。
标签: java spring spring-mvc applicationcontext