2013-07-25 3 views
0

다음은 Spring 3.2.1.RELEASE, groovy 1.8.8을 사용하여 예상대로 작동하지 않습니다. 나는 꽤 많은 코드를 생략했다. 이것이 충분하지 않다면, 나는 (전체가 아닌) 일하는 전체 예제를한데 모을 것이다.Spring : @Resource로 주석 된 등록 정보 설정

끝내 콩 :

package foo 

import javax.annotation.Resource 

class SomeBean { 
    @Resource 
    String someProp 
} 

스프링 XML :

<context:annotation-config /> 

<context:component-scan base-package="other.packages.not.foo" /> 

<bean id="someBean" class="foo.SomeBean"> 
    <property name="someProp" value="bar" /> 
</bean> 

이 문자열 속성을 만족시키기 위해 빈을 찾을 수 없다는 오류와 함께 실패합니다. 이 문제를 해결하기 위해, 나는이 일을 결국 :

끝내 콩 :

@Resource(name = 'someProp') 
String someProp 

스프링 XML : 나는,이 솔루션을 좋아하지 않아

<bean id="someProp" class="java.lang.String"> 
    <constructor-arg value="bar" /> 
</bean> 

<bean id="someBean" class="foo.SomeBean" /> 

이 커플 콩 소스 코드 때문에 스프링 구성으로, 그리고 그건 잘못된 방향으로 커플 링. 그리고 그것은 간단한 String을위한 불필요한 빈을 생성합니다. 확실한 해결책이 누락 되었습니까?

+0

가능한 복제본 [봄 2.5.x를 사용하여 문자열에 단일 속성 값을 삽입하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/217718/how-do-i-inject-a -single-property-value-into-a-string-using-spring-2-5-x) –

답변

0

@Resource는 속성 삽입을위한 것이 아닙니다. 이를 위해

작동합니다 :

<bean id="someBean" class="foo.SomeBean"> 
    <property name="someProp" value="bar" /> 
</bean> 

당신은 당신이 당신의 컨텍스트에서 다른 빈을 주입 할 경우 사용될 수있는 setter 메소드를

public void setSomeBean(String value) { 
    someValue = value; 
} 

@Resource를 구현해야합니다.

@Resource(name="someBean") 
SomeBean someBean 
+0

자바가 아니라 그루비야. 그래서 setter는 컴파일러에 의해 생성됩니다. 나는 자원 주석을 제거해도 작동한다는 것을 지적 했어야했다. 내 이해는 배포하기 전에 설정해야하는 속성에 주석을 추가하기위한 것입니다. 그렇지 않은가요? 이 문자열은 필수 속성입니다. –

+0

@ Resource와 @ Resource를 혼동스럽게 생각한다고 생각합니다. @ Resource는 컨텍스트에서 bean을 삽입합니다. @ Required는 속성을 필수로 만듭니다. 따라서 속성이 컨텍스트 설명에 지정되지 않은 경우 컨텍스트 초기화가 실패합니다. – rec

+0

이제는 의미의 차이를 더 잘 이해합니다. 내 자바에서 봄 주석을 피하려고했는데, 바로 대답은 @ Inject를 사용하는 것 같다. 내 이해는 @ Resource가 자신의 라이프 사이클을 공유 할 수있는 구성 요소 용으로 예약되어야합니다. 아마도 자신의 서비스뿐 아니라 다른 사람들이 사용했을 수도 있습니다. –