0

나는 봄에 대해 실험을 해왔다. SpEL을 사용하여 다른 bean에 대한 bean의 값 및 참조 등록 정보를 복사하려고합니다.SpEL을 사용하여 콩의 참조를 복사 할 수 없다.

이 콩을 고려

<bean id="kenny" class="com.springinaction.springidol.Instrumentalist"> 
    <property name="song" value="#{'Jingle Bells'}" /> 
    <property name="instrument" ref="piano" /> 
</bean> 

아래 그림과 같이 내가 다른 콩에 그 값을 복사 할 : 그것은하지 않는

<bean id="carl" class="com.springinaction.springidol.Instrumentalist"> 
    <property name="song" value="#{kenny.song}" /> 
    <property name="instrument" ref="#{kenny.instrument}" /> <-- I GET EXCEPTION OVER HERE 

</bean> 

는 그러나, 나는 두 번째 prpoperty에 대한 예외를 얻을 케니의 악기를 복사 할 수 있습니다. "주" org.springframework.beans.factory.BeanCreationException 스레드에서

예외 : 오류 은 '칼을 이름으로 빈을 생성하는 노래는 예외가 나는이 예외가

을 발생하지 않고 올바르게 복사 '클래스 경로 리소스에 정의 됨 [Beans.xml] :'# {kenny.instrument} '빈에 대한 참조를 확인할 수 없습니다. 'bean '속성을 설정하는 중입니다. 중첩 예외는 입니다. org.springframework.beans.factory.BeanExpressionException : 표현 구문 분석에 실패했습니다. EL1008E : POS (6) 필드 또는 속성 "악기"타입의 객체 에서 찾을 수없는 'com.springinaction.springidol.Instrumentalist'

중첩 예외이다 org.springframework.expression.spel.SpelEvaluationException

악기를 복사하고 id가 "carl"인 빈에 대해 설정할 수있는 방법을 알려주세요.

답변

3

ref은 다른 콩에 대한 참조입니다. 귀하의 경우에는 kenny bean의 instrumemt 특성 값을 사용하려고합니다.

당신은이 InstrumentalistgetInstrument() 방법이 있다고 가정

<property name="instrument" value="#{kenny.instrument}" /> 

사용해야합니다.

+0

감사합니다. 악기 kenny가 언급하고 있기 때문에 제가 참고 문헌을 추가 한 유일한 이유는 콩이기도합니다. – Goaler444

+1

kenny 속성의 소스가 bean 인 것은 중요하지 않습니다. 해결의 시점에서 그 연관성은 상실됩니다.'ref = "piano"'또는'value = "# {kenny.instrument}'를 사용할 수 있습니다. –