我用Spring AOP写了一个非常简单的Aspect。它有效,但是我在理解实际情况时遇到了一些问题。我不明白为什么我必须添加Aspectjweaver.jar?Spring- AOP文档明确指出,只要我仅使用Spring-AOP,就不需要AspectJ编译器或weaver:
但是,AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或编织器。
我的配置如下所示:
<aop:aspectj-autoproxy /> @Aspect @Service public class RemoteInvocationAspect { @Before("execution(* at.test.mypackage.*.*(..))") public void test() { System.out.println("test"); } ...
我也尝试了XML配置,但是没有做任何更改。也许我可以放手,但是我真的很想了解为什么要使用AspectJ- Weaver?如果我不在Maven中添加依赖项,我会得到 java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
我认为Spring AOP实现正在重用AspectJ-Weaver中的某些类。它仍然使用动态代理-不进行字节码修改。
春季论坛的以下评论可能会澄清。
在这种情况下,Spring不使用AspectJ编织器。它只是在重用aspectjweaver.jar中的某些类。 -Ramnivas
在这种情况下,Spring不使用AspectJ编织器。它只是在重用aspectjweaver.jar中的某些类。
-Ramnivas