3

当我从单元测试或通过独立应用程序运行它时,我有一个方面可以正常工作。但是,当我将它作为 Web 应用程序的一部分运行并将其托管在 Tomcat 上时,不会应用 Aspects。

我的方面看起来像

public class MyAspect {

    @Around("within(com.service..*)")
    public Object doLogging(ProceedingJoinPoint pjp) throws Throwable {
        //do something
        Object obj = pjp.proceed();
        //do something else
        return obj;
    }

}
4

3 回答 3

3

我能够解决这个问题。原因是方面是由 Web 应用程序上下文而不是由全局应用程序上下文处理的,所以我必须重组几件事。我在这里详细说明了步骤

@seanizer Spring 确实支持内部。的确,它只适用于方法,并且在其中会适用于com.service的所有包和子包的方法。有关详细信息,请查看此处的参考文档

于 2010-11-05T13:58:41.363 回答
1

更新:我会把它留在里面,因为它仍然部分有效,即使它对你的情况没有帮助。不过我会编辑一些地方,编辑标记为thisthis

如果您使用的是 Spring AOP,它就无法工作。Spring AOP 只完全支持execution切入点。within切入点仅在应用于方法执行时才有效,因为您需要 AspectJ的全部功能(Spring AOP 仅使用一些 AspectJ 切入点,但不使用 AspectJ 编织器)。within通过静态编译(通常通过MavenAnt)或通过Load-Time-Weaving

此外,您的班级缺少@Aspect注释。

于 2010-11-05T09:04:32.593 回答
0

搬家怎么样

<context:component-scan base-package="com.*" />
<mvc:annotation-driven/>
<aop:aspectj-autoproxy />   

到 servlet-mvc.xml?

于 2016-09-13T12:40:15.427 回答