我有一个我想要选择的春天豆。
我试过这样的事情:
<bean id="springSqlSessionConfigBasedFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
<property name="dataSource" ref="infraDataSource" />
<property name="configLocation" value="#{ (!''.eqauls(${myBatis.configLocation})) ? ${myBatis.configLocation} : 'null' }" />
</bean>
所以 - 如果属性(由属性configurer加载)存在,它应该注入该值,如果不存在,它应该注入一个空值。
我得到了这个异常运行上面的内容:
Caused by: java.lang.NullPointerException
at org.springframework.expression.spel.ast.SpelNodeImpl.<init>(SpelNodeImpl.java:54)
at org.springframework.expression.spel.ast.Ternary.<init>(Ternary.java:36)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:136)
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:85)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:56)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:154)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:85)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:73)
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:123)
答案 0 :(得分:3)
如@ bohuslav-burghardt所述,您需要引用占位符。
但是,您必须不引用null ...
value="#{!''.equals('${foo}') ? '${foo}' : null}"
......对我来说很好。
编辑:
要回答下面评论中的问题,您需要在占位符配置器上将ignore-unresolvable
设置为true
并测试未解析的占位符:
<context:property-placeholder properties-ref="props" ignore-unresolvable="true"/>
<bean class="org.springframework.integration.samples.amqp.Foo">
<property name="foo"
value="#{(!''.equals('${foo}') AND !'${foo}'.contains('{foo}')) ? '${foo}' : null}" />
</bean>
请注意,它使用contains
并省略$
以避免替换该参数;否则,一个好的替换将失败该测试并导致注入null。