我需要在 Spring 应用程序中提供对外部属性解密的支持。我计划使用来自 spring-cloud-config 的机制,在 Environment
准备好并添加具有更高优先级的解密属性后触发。不幸的是,它严重依赖于发出 ApplicationEnvironmentPreparedEvent
的 Spring Boot 引导机制。查看 Spring Framework 代码,环境和上下文创建是高度耦合的,很难在它们之间运行我自己的代码。我正在使用的应用程序是一个大型的多模块“标准”Spring MVC 应用程序,我现在不想将它转换为 Spring boot 应用程序。
问题:
在 Spring(不是 Spring Boot)应用程序中,如何在环境创建之后和上下文创建之前(在将属性注入(inject)到“正常”bean 之前修改属性)执行我的代码?
替代问题:
是否有任何其他方法可以控制注入(inject) bean 的属性(用于修改最初由 Spring 解析的值)?
最佳答案
您可以创建一个自定义的 ApplicationContextInitializer
,它将解密或任何内容添加到您选择的 PropertySource
。
我们在我目前开发的一个应用程序中做了类似的事情。从文件和数据库加载一些自定义属性后,我们将所有可用的 PropertySource
包装在 EncryptablePropertySource
中,因为多个属性已加密(为此我们使用 Jasypt 库)。
关于java - 如何在注入(inject) bean 之前修改 Spring 解析的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928735/