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

问题描述

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

解决方法

有什么方法可以在@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上下文中使用时完全相同。

可能还是梦想?

谢谢你的帮助!

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”