2012-03-29 2 views
7

Spring bean에 @Resource이라는 주석이 달린 필드에 문제가 있습니다. 내가 가진 무엇 :Spring @Resource Handling

setter 메소드와 필드는, 내 배포 설명자에 @Resource

@Resource 
private URL someUrl; 

public void setSomeUrl(URL someUrl) { 
    this.someUrl = someUrl; 
} 

<env-entry> 태그를 주석 (web.xml을)

<env-entry> 
    <env-entry-name>someUrl</env-entry-name> 
    <env-entry-type>java.net.URL</env-entry-type> 
    <env-entry-value>http://somedomain.net/some/path</env-entry-value> 
</env-entry> 

응용 프로그램은 시작에 실패 BeanCreationException, 나는 스프링이 관리하는 빈을 주입하기를 원하기 때문에 스프링 기대하지 않기 때문에 기대하지 않는다. Spring이 @Resource을 처리하고 JNDI 자원을 검색하길 바란다.

이것은 Spring 2.5.6SEC03이며, 다른 @Component 인스턴스에 대한 bean 자체에는 @Service 주석이 달려 있습니다. 이 경우 서블릿 컨테이너는 Tomcat 7이지만 궁극적으로 Weblogic 10에 배치 될 것입니다. 그래서 두 가지 모두에서 작동하는 솔루션을 원하지만, Weblogic은 필수품입니다.

스프링 2.5에서이 기능을 잘못 사용하고 있습니까? 일반적으로? 실종 됐어? JNDI에 대해 내가 오해하는 부분이 있습니까? 모든 도움을 주시면 감사하겠습니다. 감사.

답변

7

스프링 스테레오 타입 주석 (, @Component ...)을 사용하는 경우 스프링 구성에 <context:component-scan /> 요소를 포함하는 것이 좋습니다. 이렇게하는 것이 좋지만 응용 프로그램 컨텍스트 인 as stated just above the second note in this link을 사용하여 CommonAnnotationBeanPostProcessor을 자동으로 등록합니다.

CommonAnnotationBeanPostProcessor을 포함하는 문제는 @Resource 주석을 Spring이 처리하고 해당 응용 프로그램 컨텍스트에서 빈을 주입하려고 시도한다는 것입니다. 자신의 CommonAnnotationBeanPostProcessor 빈을 등록하고 alwaysUseJndiLookup 속성을 true으로 설정하여 빈을 구성함으로써 Spring이이 @Resource에 직접 JNDI 액세스하도록 허용 할 수 있습니다. 링크 된 문서의 참고

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> 
    <property name="alwaysUseJndiLookup" value="true"/> 
</bean> 

에주의 :

참고 : "주석-설정 상황"과 "컨텍스트 : 구성 요소 스캔"XML 태그 CommonAnnotationBeanPostProcessor이 등록됩니다 기본 . 사용자 정의 CommonAnnotationBeanPostProcessor Bean 정의를 지정하려는 경우 기본 주석 구성을 제거하거나 해제하십시오!

+0

위대한,이 완전히 작동! 또한 주석 본문의 "mappedName"값을 sprcifying하여 CommonAnnotationBeanPostProcessor가 JNDI 조회를 수행하도록 할 수 있음을 발견했습니다. 모든 말, 그리고이 일을 넣어 후, 나는 우리의 표준 기업의 배포 프로세스가 여러 배포 설명자를 지원하지 않습니다 배웠습니다. 나는 모든 배포에서 같은 것을 사용하기로되어 있습니다. 따라서이 방법은 효과가 없습니다. –