【问题标题】:Spring - properties filte to Map<String, Class<Object>>Spring - Map<String, Class<Object>> 的属性文件
【发布时间】:2014-11-13 11:25:00
【问题描述】:

我正在尝试加载一个将属性文件作为参数传递给构造函数的类,但我得到了一个强制转换异常: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
    }
}

【问题讨论】:

    标签: java spring map properties code-injection


    【解决方案1】:

    你可以这样做:

    上下文:

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

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

    【讨论】:

    • 感谢您提供帮助,但这对我不起作用。我的 Foo 类是一个工厂,我需要传递地图对象才能知道我将创建哪个对象。
    • 谢谢,看起来类似于stackoverflow.com/questions/7246369/…
    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多