2

我正在使用 Spring 3,并且我有一个带有签名的静态方法的类My.Package.MyClass.build(Map<MyObject1,MyObject2> map)。在我的spring bean文件中,我有以下内容:

<constructor-arg index="1"
        value="#{T(My.Package.MyClass).build(TheMap)}" />

<util:map id="TheMap">
 ...add map entries...
</util:map>

当我运行它时,我收到一条错误消息,指出在类型build(java.util.LinkedHashMap)上找不到该方法。My.Package.MyClass我做了一些测试,当我从方法签名中删除泛型时,它工作正常。我认为这种转换会起作用。谁能告诉我我做错了什么?

谢谢,杰夫

4

1 回答 1

0

它适用于我的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
            ">

    <bean id="object1" class="sk.matejtymes.elTest.Object1"/>
    <bean id="object2" class="sk.matejtymes.elTest.Object2"/>

    <util:map id="theMap">
        <entry key-ref="object1" value-ref="object2"/>
    </util:map>

    <bean id="elTestClass" class="sk.matejtymes.elTest.ElTestClass">
        <constructor-arg index="0"
            value="#{T(sk.matejtymes.elTest.ElTestClass).build(theMap)}"/>
    </bean>

</beans>

并对这个测试类进行分类:

public class ElTestClass {

    private Map<Object1, Object2> map;


    public ElTestClass(ElTestClass orig) {
        this.map = new LinkedHashMap<Object1, Object2>(orig.map);
    }


    private ElTestClass(Map<Object1, Object2> map) {
        this.map = map;
    }


    public static ElTestClass build(Map<Object1, Object2> map) {
        return new ElTestClass(map);
    }


    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/elTest/application-context.xml");

        ElTestClass elTestClass = context.getBean(ElTestClass.class);

        System.out.println(elTestClass);
    }
}

注意:Object1 和 Object2 类完全为空。

于 2011-04-28T15:57:43.230 回答