2010-06-16 4 views
4

봄 3로 업그레이드하기 전에 내 applicationContext.xml 파일이 있었다 :Spring EL에서 속성 자리 표시자를 사용할 수 있습니까?

<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor"> 
     <property name="validateRequest" value="${validateRequest}" /> 
     <property name="validateResponse" value="${validateResponse}" /> 
    </bean> 

경우 $ {하여 validateRequest)와 $ {하여 validateRequest) 내 속성 파일 또는 정의되지 않을 수 속성을 참조하십시오.

스프링 2에서는 이러한 프로퍼티가 등록 정보 파일에 없으면 bean의 setter가 호출되지 않으므로 PolePayloadValidatingInterceptor에 하드 코딩 된 기본값이 사용되었습니다. 봄 3로 업그레이드 한 후

, 행동이 다른 것 같다

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'annotationMapping' defined in class path resource [com/northgateis/pole/ws/applicationContext-ws.xml]: Could not resolve placeholder 'validateRequest' 
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:272) 
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75) 
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:640) 
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:615) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405) 
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272) 

나는 봄 EL으로 취미 삼아 시도했지만 다음 아무튼 : 속성이 속성에 존재하지 않는 경우, 나는 다음과 같은 예외가 파일 '이 t 작동하는 것 : 엘비스 연산자가 항상 사용됩니다

<bean class="com.northgateis.pole.ws.PolePayloadValidatingInterceptor"> 
     <property name="validateRequest" value="${validateRequest?:true}" /> 
     <property name="validateResponse" value="${validateResponse?:false}" /> 
    </bean> 

값 후, 속성이 proeprties 파일에 정의 된 경우에도. 구문이 받아 들여지는 것에 흥미 롭습니다.

제안 사항?

답변

6

Elvis 연산자로 Spring 3의 기본값 처리가 다소 엉망이었던 것처럼 보입니다. 이것은 분명히 신선한 - 아웃 - 오브 - 더 - 오븐 봄 3.0.3에 (SPR-7209 참조) 수정되었습니다, 올바른 구문은 오히려 바로크해야한다 :

#{${validateRequest}?:true} 
+2

희망적으로 보입니다. 속성이 null (즉, 속성 파일에서 비어 있음) 일 때 실제로 작동하지만 속성 파일에서 속성이 없으면 "placeholder 'validateRequest'"BeanDefinitionStoreException을 해결할 수 없습니다. SPR-7209를 다시 열어보고 봄 팀이 결석을 공백으로 처리 할 수 ​​있는지 확인해 보겠습니다. –

3

설정 봄 EL에 대한 필요가 없습니다 자리 표시 자 구성자로 해결할 때없는 속성의 기본값입니다. 단순히 ${validateRequest:true}을 사용하십시오. "엘비스 연산자"는 자리 표시자를 해결하는 것과 관련이 없으며 자리 표시 자 구성자가 제공하는 입력에 의존합니다.

SPR-4785을 참조하십시오.

관련 문제