gpt4 book ai didi

java - 使用 Play2 框架进行 Spring 属性注入(inject)

转载 作者:行者123 更新时间:2023-11-30 03:43:25 31 4
gpt4 key购买 nike

我喜欢 Play Framework 2 的许多功能(我将它与 Java 一起使用),但是,作为依赖注入(inject)的粉丝,我也喜欢 Spring,特别是它通过使用 将配置注入(inject)到对象中的方式@Value注释。

因此,我很想知道如何使用 Play 的内置属性解析机制将属性值注入(inject)到实例变量中。像这样的事情:

@Component
public class SpringBeanWithinAPlay2Application {

@Value("${application.timeout:10}")
private int timeout;
}

有人有任何线索吗?非常感谢。

最佳答案

不久前我遇到了同样的问题,这是我的方法:

首先,当您启动 Spring 应用程序上下文时(我使用基于注释的配置,但同样适用于基于 XML 的配置),您必须添加自定义 PropertySource ,这是 Spring 添加新的属性解析方式的方式。像这样的事情:

public static void initialize() {
ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().getPropertySources().addFirst(new PlayFrameworkPropertySource());
ctx.scan("somepackage");
ctx.refresh();
}

自定义类 PlayFrameworkPropertySource 是发挥神奇作用的类:

public class PlayFrameworkPropertySource extends PropertySource<Object> {

public PlayFrameworkPropertySource() {
super("Play Framework properties resolution mechanism");
}

@Override
public Object getProperty(String propertyName) {
// or ConfigFactory.load().getString(propertyName), as you prefer...
return Configuration.root().getString(propertyName);
}
}

为了让这一切发挥作用,您只需要再做一件事:显式声明 PropertySourcesPlaceholderConfigurer 类型的 bean 在某些 @Configuration您可能正在使用的类:

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

重要提示:此 bean 必须是静态,因为它是 BeanFactoryPostProcessor并且它应该在任何其他常规 @Bean 之前加载。

这对我来说就像一个魅力,希望这对其他人有帮助!

干杯,
乔纳森

关于java - 使用 Play2 框架进行 Spring 属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305458/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com