Spring Boot自定义属性 - 当类不在应用程序上下文中时,如何包括外部化属性



很难理解,但是对于我的应用程序,必需的格式。我有一些在运行时包含的自定义库,因此它们不在春季应用程序上下文中。为了从Spring Boot应用程序中获取API,我捕获了所需的API,并将其倒入我的外部类。

显示一个示例:

HashValueService hashValueService 
   = (HashValueService) appContext.getBean("hashValueServiceImpl");
ServiceList srvList = new ServiceList();
    srvList.setHashValueService(hashValueService);

通过这种方式,我可以访问我的数据库,该数据库在我的应用程序上下文中。

我在整个应用程序中分布了很多属性。因此,我想使用默认应用程序。专业属性在我的应用程序中经常使用的属性,例如keystore。

为此我编辑了应用程序。使用此行:

application.keystore=server.jks

但是,当然,春季@Value的使用确实显示了该属性的零,因为此类不在我的应用程序上下文中:

@Value("${application.keystore}")
private String keystore;

您是否有想法将此属性过渡到此客户库?也许创建一个新的属性文件应该有帮助吗?非常感谢你。

大多数弹簧魔术是由BeanPostProcessor s完成的。很好地看一下它们 - 链接。

@Value接线(以及更多)由AutowiredAnnotationBeanPostProcessor执行,您可以将其用于您的目的:

AutowiredAnnotationBeanPostProcessor beanPostProcessor = 
          appContext.getBean(AutowiredAnnotationBeanPostProcessor.class);
ServiceList srvList = new ServiceList();
beanPostProcessor.processInjection(srvList);

之后,您的ServiceList应该初始化String keystore字段。

最新更新