3

所以在 spring 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(...) { ... }
}

因此,当我在我的 spring 配置中明确声明 bean 时,这一切都很好:

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

但我希望能够在球衣代码上使用此注释,但它不起作用。现在,在球衣配置中,将以下内容添加到 web.xml。这个想法是你告诉球衣在哪些包裹中可以找到各种休息服务。即,它在包中查找类: com.mycom.restservices.* 并实例化它们。据推测,这些 bean 的实例化正在“以不同方式”完成,因此不会被代理:

<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>
    ....

那么尝试让这些注释在球衣豆上工作的“最佳实践”是什么?

谢谢。

4

1 回答 1

0

如果您只需要摆脱显式的 bean 声明,则可以使用 Spring 类路径扫描功能而不是 Jersey 功能。

只需使用@Component(或其他类似的注释)注释您的 Jersey 资源,并使用<context:component-scan>这些资源指定包。

这样 bean 将由 Spring 实例化,并且 Spring AOP 可以正常工作。

也可以看看:

于 2012-07-05T17:06:22.763 回答