Spring AOP - 为什么我需要aspectjweaver?

Mar*_*o B 35 java aop spring aspectj spring-aop

我用Spring AOP写了一个非常简单的Aspect.它有效,但我在理解真正发生的事情时遇到了一些问题.我不明白为什么我要添加aspectjweaver.jar?Spring-AOP文档明确指出,只要我使用Spring-AOP,我就不需要aspectj编译器或weaver:

AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或weaver.

我的配置如下所示:

<aop:aspectj-autoproxy />

@Aspect
@Service
public class RemoteInvocationAspect {

    @Before("execution(* at.test.mypackage.*.*(..))")
    public void test() {
        System.out.println("test");
    }
    ...
Run Code Online (Sandbox Code Playgroud)

我也尝试过XML配置,虽然没有改变任何东西.也许我可以放手,但我真的想了解为什么使用aspectj-weaver?如果我没有在maven中添加依赖项,我会得到 java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

gka*_*mal 32

Spring AOP实现我认为是重用了aspectj-weaver中的一些类.它仍然使用动态代理 - 不进行字节码修改.

春季论坛的以下评论可能会澄清.

在这种情况下,Spring没有使用AspectJ weaver.它只是重用了aspectjweaver.jar中的一些类.

-Ramnivas


San*_*osh 6

您正在使用AspectJ样式的pointcut-expression,@Aspect并且@Before是AspectJ的一部分。检查此链接

关于它AspectJ-weaver,它实际上是一个字节码编织器,在加载时将方面编织成类