加载属性文件给出了奇怪的行为

时间:2015-04-24 21:04:07

标签: java spring properties applicationcontext

考虑这个例子

 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>

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

enter image description here

如何为Properties加载emailProperties

4 个答案:

答案 0 :(得分:1)

我必须注入另一个知道如何解析Properties的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>

答案 1 :(得分:0)

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

的xmlns:UTIL =&#34; 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>

也许在春季4中已经简化了一些事情,但这就是你在3及更早版本中的表现。它比使用org.springframework.beans.factory.config.PropertiesFactoryBean短了十分之一。

答案 2 :(得分:0)

看看这篇文章是否有帮助,但您可能需要更改注入bean的方式 http://www.javabeat.net/spring-load-properties-file-value-annotation/

答案 3 :(得分:0)

Another solution:

<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;
    }
}