当前位置: 首页 > 知识库问答 >
问题:

Spring AOP-为什么我需要aspectjweaver?

朱修真
2023-03-14

我用Spring AOP写了一个非常简单的方面。这是可行的,但我在理解到底发生了什么方面有一些问题。我不明白为什么我必须添加aspectjweaver。罐子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");
    }
    ...

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

共有3个答案

从景曜
2023-03-14

我最近有一个类似的问题,如果spring不依赖于aspectj,为什么它会抛出aspectj错误?

要在不依赖AspectJ的情况下使用Spring AoP,必须在xml中完成。注释是AspectJ的一部分。

此外,真正酷的表达式语言仅受AsheJ支持。因此,您必须定义显式切入点。请参阅第6.3.2节。声明切入点:http://static.springsource.org/spring/docs/2.0.x/reference/aop.html节

我仍然很难找到关于这项技术的详细文档。

淳于鹏
2023-03-14

您使用的是AspectJ风格的切入点表达式Aspect和AspectJ之前的。检查此链接。

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

杜联
2023-03-14

我认为Spring AOP实现重用了aspectj-weaver中的一些类。它仍然使用动态代理——不做字节代码改造。

以下来自Spring论坛的评论可能会澄清。

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

-Ramnivas

 类似资料:
  • 问题内容: 我用Spring AOP写了一个非常简单的Aspect。它有效,但是我在理解实际情况时遇到了一些问题。我不明白为什么我必须添加Aspectjweaver.jar?Spring- AOP文档明确指出,只要我仅使用Spring-AOP,就不需要AspectJ编译器或weaver: 但是,AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或编织器。 我的配置如下所示:

  • 问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。

  • 以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?

  • 为什么我们需要字典? 计算机最适合使用数字,而人类最适合使用姓名。我们创建了DNS以便记住主机名而不是IP地址。字典以相同的方式使用,因此我们可以记住AVP名称而不是类型编号。当FreeRADIUS解析请求或生成响应时,会查阅字典。 但是,字典与DNS不同,因为RADIUS客户端不知道FreeRADIUS使用的这些“友好”名称。永远不会在RADIUS客户端和RADIUS服务器之间交换AVP名称。

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内