Spring:无法使用环境将属性从XML注入JavaConfig

Spring:无法使用环境将属性从XML注入JavaConfig,java,spring,spring-mvc,dependency-injection,spring-java-config,Java,Spring,Spring Mvc,Dependency Injection,Spring Java Config,我正在致力于支持一个使用基于XML的配置的旧式SpringJava项目。从属性源进行的注入如下所示: <context:property-placeholder location="classpath:app.properties"/> 这个JavaConfig依赖于一些注入的属性。我从各种来源(如和)中了解到,这可以通过将环境实例注入到我的JavaConfig类中来实现。因此,我将其作为一个注入的全局字段: @Inject private Environment environm

我正在致力于支持一个使用基于XML的配置的旧式SpringJava项目。从属性源进行的注入如下所示:

<context:property-placeholder location="classpath:app.properties"/>
这个JavaConfig依赖于一些注入的属性。我从各种来源(如和)中了解到,这可以通过将
环境
实例注入到我的JavaConfig类中来实现。因此,我将其作为一个注入的全局字段:

@Inject
private Environment environment;
然后我可以根据需要在@Bean方法中执行此操作:

String prop = environment.getProperty("my.property");
但是,该属性在环境中找不到,并导致值为null,尽管它已清楚地列在我的类路径的app.properties文件中。相反,如果我使用
@Value
注释样式注入属性,如下图所示,那么我会将字符串变量正确地注入其中:

@Value("${my.property}")
private String prop;
我很高兴我能够解决这个问题,但我仍然非常好奇为什么注入的环境变量样式不适合我。这让我担心我在某处搞砸了某种配置。有人有什么想法吗?

这个

<context:property-placeholder location="classpath:app.properties"/>
并取回它们

@Autowired
private Environment env;
...
env.getProperty("my.property");

这样您就不需要为
属性占位符提供
位置
。还有一个问题。由于带有JavaConfig的项目是一个依赖项,因此期望使用它的依赖项目(在本例中是遗留项目)将是提供属性的项目。因此,依赖项指定属性文件的位置是没有意义的。这是否意味着环境基本上不起作用?或者我可以使用一个空的@PropertySources注释?@ecbrodie如果您不能在
@Configuration
类中设置资源位置,您将需要某种
环境感知
bean(作为旧式XML配置中的
BeanFactoryPostProcessor
,您可以手动指定属性源,并将它们交给
环境
。据我所知,没有办法用XML设置属性源。或者我坚持使用@Value,因为它可以工作;)。谢谢。
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations" value="classpath:app.properties" />
</bean>
@PropertySources(value = { @PropertySource(value = "classpath:app.properties") })
@Configuration
public class Example {}
@Autowired
private Environment env;
...
env.getProperty("my.property");