Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringAOP在Tomcat和tcserver中不起作用_Java_Spring_Aop_Aspectj_Spring Aop - Fatal编程技术网

Java SpringAOP在Tomcat和tcserver中不起作用

Java SpringAOP在Tomcat和tcserver中不起作用,java,spring,aop,aspectj,spring-aop,Java,Spring,Aop,Aspectj,Spring Aop,当我从单元测试或通过独立应用程序运行它时,我有一个方面可以很好地工作。但是,当我将其作为web应用程序的一部分运行并将其托管在Tomcat上时,不会应用方面 我的外貌看起来像 public class MyAspect { @Around("within(com.service..*)") public Object doLogging(ProceedingJoinPoint pjp) throws Throwable { //do something

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

我的外貌看起来像

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;
    }

}

更新:我将把它留在这里,因为它仍然部分有效,即使它对您的情况没有帮助。我将编辑一些地方,编辑标记为这样或这样

如果您使用的是SpringAOP,它将无法工作。SpringAOP只完全支持
执行
切入点。
中的
切入点仅在应用于方法执行时有效,因为
中的
的全部功能需要AspectJ(Spring AOP只使用一些AspectJ切入点,而不使用AspectJ weaver)。通过静态编译(通常通过或)或通过


另外,您的类缺少一个
@Aspect
注释。

我能够解决这个问题。原因是方面是由web应用程序上下文而不是全局应用程序上下文处理的,所以我必须重新构造一些东西。我已经详细说明了步骤

@seanizer弹簧在内部提供支撑。确实,它只应用于方法,并且在其中将应用于com.service的所有包和子包的方法。有关详细信息,请查看参考文档

移动怎么样

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


要servlet mvc.xml?

我在tcserver(位于tomcat之上的Spring服务器)中看到了相同的行为。Jboss也不起作用。在Pointcut中,Spring起作用。当我使用Spring AOP only在一个独立应用程序中运行它时,上面的特性运行得很好Spring AOP只支持Spring beans的方法执行连接点来源:您可能在IDE中启用了AspectJ编织,所以您认为您使用的是Spring AOP,而实际上您正在使用AspectJ。我的IDE没有启用AspectJ编织。当我直接在tomcat服务器中部署war并从命令行工具运行服务器(因此没有涉及ide)时,我也看到了同样的问题。正如我所写的:Spring AOP不支持war,也不支持war,因为Spring AOP根据默认值基于JDK代理,而它们反过来又基于方法拦截。如果您需要更多,请使用AspectJ(这正是Spring AOP文档所建议的)。是的,我承认,
中的
部分受支持(当它应用于方法执行时)+很遗憾,您的链接已从web上消失。链接内容的核心应该包含在答案中。这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反