2012-07-05 2 views
2

, 나는 다음과 같은 포인트 컷을 정의스프링 AOP와 저지 클래스 그래서 스프링의 XML 설정에

<aop:config> 
    <aop:aspect ref="metricsAdviceInterceptor"> 
     <aop:around method="invoke" pointcut="@annotation(com.mycom.MetricsAdvice)"/> 
    </aop:aspect> 
</aop:config> 
아이디어는 "MetricsAdvice"주석이 방법에 대한 통계 수집하는 것입니다

:

class SomeClass { 
    @MetricsAdvice 
    public void someMethod(...) { ... } 
} 

을 그래서 내 봄 설정에서 콩을 명시 적으로 선언 할 때이 모든 작동합니다 :

<bean id="someBean" class="com.mycom.SomeClass" /> 

하지만 난 원한다. 저지 코드에서이 주석을 사용할 수 있으려면 작동하지 않습니다. 이제 jersey config에서 web.xml에 아래 내용을 추가합니다. 그 아이디어는 당신이 저지에 다양한 휴식 서비스를 찾을 패키지를 말하고 있다는 것입니다. 즉, 패키지의 클래스 com.mycom.restservices. *를 찾아서 인스턴스화합니다. 아마도 이러한 콩의 인스턴스 따라서 "다른"수행 및되고 프록시 점점되지 않습니다

<servlet> 
    <servlet-name>JerseyWebApplication</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <display-name>Jersey Servlet</display-name> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> 
     <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value> 
      com.mycom.restservices.billing; 
      com.mycom.restservices.account; 
      org.codehaus.jackson.jaxrs 
     </param-value> 
    </init-param> 
    .... 

그래서 이러한 주석 저지 콩 작동하도록 노력에 대한 "모범 사례"는 무엇인가요?

Thx.

+0

이 (구) 질문 저지 1이지만, 뉴저지 2의 사용자가 문제 [JERSEY-2301] 찾을 수 있습니다 (https : //로 java.net/jira/browse/JERSEY-2301) relevant –

답변

0

명시 적 bean 선언을 제거하는 것이 필요한 경우 Jersey 대신 Spring 클래스 경로 검색 기능을 사용할 수 있습니다.

너의 저지 자원에 @Component (또는 다른 유사한 주석)으로 주석을 달고 <context:component-scan>을 사용하여 이러한 자원이있는 패키지를 지정하십시오.

이 방법으로 bean은 Spring에 의해 인스턴스화되고 Spring AOP는 정상적으로 작동합니다. 또한

참조 :

+0

아마도 "누가 그것을 인스턴스화하고/사용 하는가?"때문에 작동하지 않습니다. 발행물. 저지가 인스턴스로 만들고 콩을 직접 사용하는 경우; 또한 봄에 인스턴스화하는 것이 중요하지 않습니다. 나는 원하는 인스턴스를 얻지 못하고있다. 프록시 인스턴스. – Jack

+0

@Jack : web.xml에서도 이러한 init-params를 제거하려고 시도 했습니까? – axtavt

+0

저지가 빈을 인스턴스화 할 때 아마도 휴식 서비스로 이것을 드러내는 데 필요한 배선 작업을 수행하기 때문에 아마도 작동하지 않습니다. 따라서 web.xml에서 제거하면 내 휴식 서비스가 존재하지 않습니다. 나는 web.xml에 config가있을 때이 빈에 대한 ctor에 스택 추적을 기록했다. 빈이 두 번 인스턴스화 된 것을 볼 수 있습니다. 봄에는 한 번, 저지 코드에서는 한 번. 코드 경로가 완전히 다릅니다. – Jack