加载属性文件会出现奇怪的行为

Loading Properties file is giving weird behavior

考虑这个例子

 public class EmailSender {    
 private Properties emailProperties;
 public Properties getEmailProperties() {
    return emailProperties;
  }

  public void setEmailProperties(Properties emailProperties) {
    this.emailProperties = emailProperties;
  }

applicationContext.xml 我有类似

的东西
<bean name="emailSender" class="com.api.email.EmailSender">
    <property name="emailProperties" value="classpath*:email.properties"/>
</bean>

当我调试什么设置时,我看到

如何为 emailProperties 加载 Properties

您分配 属性 文件的方式似乎不完整。我通常使用 util 函数。将此添加到您的上下文 xml 文件命名空间:

xmlns:util="http://www.springframework.org/schema/util"

然后声明您的 属性 文件:

<util:properties
    id="emailProperties"
    location="classpath:/app.properties"/>

并设置bean值:

<bean name="emailSender" class="com.api.email.EmailSender">
    <property name="emailProperties" ref="emailProperties"/>
</bean>

也许在 Spring 4 中简化了一些事情,但这就是您在 3 和更早版本中的做法。它比使用 org.springframework.beans.factory.config.PropertiesFactoryBean.

短一点

我不得不注入另一个知道如何解析属性的 bean。以下对我有用

<bean id="emailProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:email.properties"/>
</bean>

<bean name="emailSender" class="com.api.email.EmailSender">
    <property name="emailProperties" ref="emailProperties"/>
</bean>

另一个解决方案:

<context:property-placeholder  location="classpath*:email.properties" />

<bean class="com.test.EmailSender" >
    <property name="prop1" value="${mail.prop1}" />
    <property name="prop2" value="${mail.prop2}" />
</bean>

-

public class EmailSender {

    private String prop1;
    private String prop2;

    public String getProp1() {
        return prop1;
    }

    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }

    public String getProp2() {
        return prop2;
    }

    public void setProp2(String prop2) {
        this.prop2 = prop2;
    }
}