小编典典

我可以在没有Spring AppContext的情况下手动加载@ConfigurationProperties吗?

java

有什么方法可以在@ConfigurationProperties不直接使用Spring
Context的情况下加载带有标记的类?基本上,我想重用Spring所做的所有智能逻辑,但是对于在bean生命周期之外手动实例化的bean。

我有一个可以在Spring(引导)中愉快地加载的bean,可以将其注入到其他Service bean中:

@ConfigurationProperties(prefix="my")
public class MySettings {
    String property1;
    File property2;
}

详情参见春天docco http://docs.spring.io/spring-boot/docs/current-
SNAPSHOT/reference/htmlsingle/#boot-features-external-config-command-line-
args

但是现在我需要从Spring之外(由Hibernate创建)的类访问该bean。该类是在应用程序启动过程的早期创建的,以至于Spring
Boot尚未通过经典的查找帮助器方法或“我自己拥有”的静态引用使应用程序上下文可用。

所以我想做些类似的事情:

MySettings mySettings = new MySettings(); 
SpringPropertyLoadingMagicClass loader = new SpringPropertyLoadingMagicClass();
loader.populatePropertyValues(mySettings);

并且让MySettings最终从命令行,系统属性,app.properties等加载了其所有值。Spring中是否有某个类可以执行类似的操作,或者是否与应用程序上下文交织在一起?

显然,我可以自己加载Properties文件,但是我真的想让Spring Boot的逻辑始终使用命令行变量(例如–my.property1 =
xxx),系统变量,application.properties甚至是yaml文件作为。以及围绕轻松绑定和类型转换的逻辑(例如,property2是一个File),因此它们的工作方式与在Spring上下文中使用时完全相同。

可能还是梦想?

谢谢你的帮助!


阅读 307

收藏
2020-11-16

共1个答案

小编典典

您正在寻找的“魔术”课是PropertiesConfigurationFactory。但是我会问您是否需要它-
如果只需要绑定一次,那么Spring应该能够为您完成它,并且如果您遇到生命周期问题,最好解决这些问题(以防它们破坏其他东西)。

2020-11-16