【问题标题】:spring aop and jersey classes春季AOP和球衣课程
【发布时间】:2012-07-05 16:51:46
【问题描述】:

所以在 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>
    ....

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

谢谢。

【问题讨论】:

  • 这个(旧)问题适用于 Jersey 1,但 Jersey 2 的用户可能会发现问题 JERSEY-2301related

标签: spring jersey aop


【解决方案1】:

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

只需使用 @Component(或其他类似的注释)注释您的 Jersey 资源,然后使用 &lt;context:component-scan&gt; 指定包含这些资源的包。

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

另请参阅:

【讨论】:

  • 它不起作用,大概是因为“谁实例化/使用它?”问题。如果 jersey 正在实例化并直接使用 bean;我是否也在春天实例化它们并不重要。我没有得到我想要的实例;代理实例。
  • @Jack:您是否也尝试从 web.xml 中删除这些初始化参数?
  • 我做到了,但它不起作用,因为大概当 jersey 实例化 bean 时,它会进行必要的布线以将其公开为休息服务。因此,如果我将其从 web.xml 中删除,我的休息服务将不存在。当我在 web.xml 中有配置时,我在 ctor 中为这个 bean 记录了堆栈跟踪;你可以看到 bean 被实例化了两次;一次来自春天,一次来自球衣代码。完全不同的代码路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2013-03-22
相关资源
最近更新 更多