属性没有在依赖jar中填充(Spring 3 / XML)

时间:2016-10-19 14:11:18

标签: java xml spring properties applicationcontext

我们有一个Spring托管应用程序,它使用另一个jar作为依赖项,它包含一个Spring托管服务类,需要使用从属性文件注入的一些值

Spring上下文设置的主要应用程序

preg_replace

从依赖jar调用服务的类

public static void main(String[] args) {
  GenericXmlApplicationContext appContext = new GenericXmlApplicationContext("applicationContext.xml");
  SomeClass someClass = (SomeClass) appContext.getBean("someClass");
  someClass.someMethod();
  ...

主应用程序的applicationContext.xml

public class SomeClass {
  private ServiceFromTheOtherJar serviceFromTheOtherJar;

  public SomeClass(ServiceFromTheOtherJar serviceFromTheOtherJar) {
    this.serviceFromTheOtherJar = serviceFromTheOtherJar;
  }

  public void someMethod() {
    serviceFromTheOtherJar.call();
    ... 

依赖jar中的服务类

<bean name="serviceFromTheOtherJar" class="com...ServiceFromTheOtherJar"/>

<bean name="someClass" class="com...SomeClass">
    <constructor-arg ref="serviceFromTheOtherJar"/>
</bean>

当然,我们在依赖jar中有一个application.properties文件,它包含我们想要注入someFieldWeWantToFillFromPropertyFile的属性值

现在我们可以将依赖jar作为依赖项添加到主应用程序中;当主应用程序正在执行时,它的Spring上下文正在设置好,并且按预期调用ServiceFromTheOtherJar.call()方法;然而someFieldWeWantToFillFromPropertyFile并没有从我们迄今为止尝试过的属性文件中填充(例如@PropertySource({&#34; application.properties&#34;}),Environment.getProperty(...)等。)

限制

  • 我们在两个罐子里都有Spring 3版本,由于部署环境,这个版本必须保持不变;所以Spring 4的解决方案是不可能的

  • 如上所示,主应用程序当前使用GenericXmlApplicationContext,并且更改它似乎表明应用程序的重大重写。因此例如似乎无法在ServiceFromTheOtherJar上使用@Service注释,因为它在执行和上下文设置期间导致了BeanCreationException

1 个答案:

答案 0 :(得分:1)

要从属性文件中读取值,您必须将以下bean添加到applicationContext.xml。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:application.properties" />
</bean>

假设application.properties文件包含这样的定义

myValue=Hello World

service-bean的定义应该像这样扩展

<bean name="serviceFromTheOtherJar" class="com...ServiceFromTheOtherJar">
    <property name="someFieldWeWantToFillFromPropertyFile" value="${myValue}" />
</bean>

现在,Spring将在类路径中查找application.properties文件,并根据myValue设置服务bean的属性。