Spring - 属性文件到Map <string,class <object =“”>&gt; </string,>

时间:2014-11-13 11:25:01

标签: java spring map properties code-injection

我正在尝试在构造函数中加载一个传递属性文件作为参数的类,但是我得到一个强制转换异常:java.lang.String cannot be cast to java.lang.Class。 有人可以帮忙吗?

这是我的代码:

myMap.properties

BAR=com.mycomp.myapp.Bar

application-context.xml如下所示:

<util:properties id="myMap" 
    location="classpath:myMap.properties" 
    local-override="false" 
    value-type="java.lang.Class" />   


<bean id="foo" class="com.mycomp.myapp.Foo">
    <constructor-arg name="myMap" ref="myMap"/>
</bean>

Foo.java

public class Foo {
    private Map<String, Class<Object>> myMap;

    public Foo(Map<String, Class<Object>> myMap){
        this.myMap = myMap;
        Class<Object> barClass = myMap.get("BAR"); //failure point
    }
}

1 个答案:

答案 0 :(得分:0)

你可以这样做:

上下文:

<context:property-placeholder location="classpath:myMap.properties"/>
<bean id="foo" class="com.mycomp.myapp.Foo">
  <constructor-arg value="${BAR}" />
</bean>

富:

public class Foo {
private String bar;

  public Foo(String bar){
      this.bar = bar;
  }
}

或者如果你真的需要整个文件,你可以将路径传递给属性文件并在构造函数中加载它。