如何在Spring配置文件中嵌套Spring Expression Language中的静态方法调用?

时间:2012-11-15 13:23:49

标签: spring guava spring-el

我想在我的bean中注入一个番石榴Predicateequalto内应该是not

我试过了:

<bean id="bla" class="something">
    <property name="indexPredicate" value="#{T(com.google.common.base.Predicates).not(T(com.google.common.base.Predicates).equalTo(145028) )}" />
</bean>

但它抛出异常:

  

引起:org.springframework.expression.spel.SpelParseException:   EL1049E:(pos 36):'。'之后的意外数据:'not(!)'

Spring 3.0.5,Guava 11.0.2

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:4)

显然,SpEL认为你的意思是the Operator not。但是,我没有看到任何方法来逃避或消除文档中的歧义。也许您需要为此提交功能请求。

或者,这是3.0之前的工厂方法方法。我知道,这太可怕了,但在你的情况下,这可能是一个可接受的解决方法:

<property name="indexPredicate">
    <bean class="com.google.common.base.Predicates" factory-method="not">
        <constructor-arg>
            <bean class="com.google.common.base.Predicates"
                  factory-method="equalTo">
                <constructor-arg>
                    <bean class="java.lang.Integer" factory-method="valueOf">
                        <constructor-arg value="145028" />
                    </bean>
                </constructor-arg>
            </bean>
        </constructor-arg>
    </bean>
</property>