前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Aspect-oriented programming with AspectJ

Aspect-oriented programming with AspectJ

原创
作者头像
用户7808419
修改2020-11-05 17:49:16
1.5K0
修改2020-11-05 17:49:16
举报
文章被收录于专栏:Music

这篇文章主要是介绍一个完整的AOP系统的基本概念。 研究了AspectJ语言的规范和实现,并且展示了一个常见的横切问题来说明AspectJ的语法,并将它与Java进行了比较。

Introduction

  • AOP系统包含的基本概念: joinPoint(连接点):目标对象,所有可以增强的方法。 PointCut(切入点):目标对象,将要和已经增强的方法。 Advice(通知/增强):增强代码。 Static crosscutting(静态横切):用于改变系统静态结构的构造 Aspect(切面):切入点+通知。

AspectJ as an AOP system

  • AspectJ实现由以下部分组成 1.编译器(agc) (通常称为编织器。这个名称的起源是因为它的主要作用是将AspectJ扩展编织到Java代码中,也就是将切面编织到类中并生成最终的可执行代码) 2.调试器(ajdb) 3.文档生成器(ajdoc) 4.程序结构浏览器(ajbrowser) 5.与Eclipse、Sun-ONE/Netbeans、GNU Emacs/XEmacs、JBuilder和Ant的集成。
  • AOP三种织入切面的方式: 1.编译期织入。这要求使用特殊的Java编译器,AspectJ是其中的代表者; 2.类装载期织入。而这要求使用特殊的类装载器,AspectJ和AspectWerkz是其中的代表者; 3.动态代理织入。在运行期为目标类添加增强生成子类的方式,Spring AOP采用动态代理织入切面。

AOP with AspectJ

这一节通过具体代码的举例,来说明AOP能够解决一些传统设计模式解决不了的问题。(代码实现见论文)

  • 例1:利用AOP实现缓存 缓存是一个典型的横切关注点。在传统的面向对象编程中,缓存关注点与主要关注点不能完全隔离开。虽然可以利用设计模式(如代理和装饰器)来在一定程度上解决这个问题,但不能完全消除它。AOP为这类问题提供了一个完整而优雅的解决方案。 如果用传统的面向对象编程,缓存逻辑将分散在文件系统实现的所有方法中。如果需要更改实现,缓存代码也必须在新的实现中出现。即使使用了装饰器设计模式,仍然需要进行一些更改。而如果使用面向切面的方法,缓存逻辑仅驻留在切面中,这本质上意味着文件系统缓存是一个完全独立的模块,对文件系统实现和/或缓存的修改可以独立完成。因此,文件系统和缓存的代码变得更简单,更容易维护。
  • 例2:利用AOP实现程序跟踪,使得跟踪与系统完全分离,并且切面本身可重用。 跟踪是一种获取程序中执行的所有记录的技术。传统上,跟踪是通过在方法开头和结尾添加日志来完成,把对日志记录器的调用添加到系统中的每个方法中,极大地增加了代码的分散,使得代码维护困难。 利用AspectJ之后,跟踪方面中的切入点获得系统中每个公共方法的执行,并在每次执行之前和之后编织对日志程序的调用。在每个通知中都可以访问thisJoinPointStaticPart引用。它引用当前连接点的静态部分,可用于访问诸如连接点签名之类的有用信息。

AspectJ tooling support

  • Eclipse 的 AspectJ Development Tools (AJDT)
  • Ant AspectJ编译器与Ant集成在一起,可以在任何Ant构建项目中运行。

Conclusion

讲了下AspectJ的发展前景很好(2012年)。一个很好的例子是Spring框架,它特别允许AOP和AspectJ代码与框架无缝集成和使用。在学术领域,AspectJ也经常用于软件设计的优化。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Introduction
  • AspectJ as an AOP system
  • AOP with AspectJ
  • AspectJ tooling support
  • Conclusion
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档