【问题标题】:Spring 3.0 Expression Langugage Java Generic ParametersSpring 3.0 表达式语言 Java 通用参数
【发布时间】:2023-03-24 01:35:01
【问题描述】:

我正在使用 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>

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

谢谢, 杰夫

【问题讨论】:

    标签: java spring generics spring-el


    【解决方案1】:

    这个配置对我有用:

    <?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 类完全为空。

    【讨论】:

    • 很有趣,谢谢。我将回到我的代码并尝试找出不同之处。
    • 如果您发布一些代码的 sn-p,问题可能会更加明显
    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多