【问题标题】:Spring EL template in a spring bean definitionSpring bean 定义中的 Spring EL 模板
【发布时间】:2015-04-29 10:26:57
【问题描述】:

我有一个注入了地图的 bean。地图中的条目是 myBean 类型(见下文),并在我的 spring XML 中定义。可能不是 myBean 的所有属性都在 xml 中定义,所以我想我会以模板的形式提供默认值,其中模板中的变量位由另一个将存在的属性提供(下面的 p1)。我希望这是有道理的。

我相信还有其他方法可以实现这一点;好吧,我知道有,但我是 Spring 新手,我遇到了 Spring EL,听起来它适合这种事情,所以我尝试了这个:

            <bean id="myDefaults" class="com.myco.MyDefaults">
              <property name="prop1" value="abc#{this.p1}def"/>
            </bean>

            <bean id="myBean" class="com.myco.MyBean" abstract="true">
                            <property name="theDefaults" ref="myDefaults"/>
            </bean>

在 MyBean 中 p1 的值为 100,我希望 theDefaults 的值为 abc100def,但我得到了一个错误:

Error creating bean with name 'myDefaults' defined in class path resource [myapp-spring.xml]:
Initialization of bean failed; nested exception is
org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'this' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'

感谢您的帮助

保罗

【问题讨论】:

    标签: spring spring-el


    【解决方案1】:

    变量是#this,而不是this,但无论如何,在这种情况下不需要它,它是隐含的。

    使用value="abc#{p1}def"

    【讨论】:

    • 谢谢。我认为我的问题定义不明确 - p1 是 com.myco.MyBean 的属性。
    • 在这种情况下,它是value="abc#{myBean.p1}def。然而,由于myBean 是抽象的,它不会起作用(你需要引用一个具体的bean)。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 2011-06-29
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多