什么是aspectj?(AOP的实现)

本文目录
AOP的实现
AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际上提供了非常广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它能够和 Java 配合起来使用。
介绍 AspectJ 的使用和编码不是本文的目的,你可以在 Google 上找到很多有关它的材料。
这里只是重温 AspectJ 中几个必须要了解的概念:
Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut:表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
下面要讨论的这些问题,也许正是接触了 AOP 之后所困惑的。
AOP 帮助我们解决了新的问题没有?
AOP 并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,并且使得系统更加健壮,可维护性更好。同时,它让我们在进行系统架构和模块设计的时候多了新的选择和新的思路。
java aspectj
java aspectj是什么,让我们一起了解一下?
AspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,扩展了Java语言,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
为什么aspectj类型间声明很重要?
AspectJ的类型间声明指的是那些跨越类和它们的等级结构的声明。考虑一下,Java语言中如何向一个一些的类中加入新方法,这需要实现一个特定接口,所有类都必须在各自内部实现接口声明的方法,而使用AspectJ则可以将这些工作利用类型间声明放在一个方面中。这个方面声明方法和字段,然后将它们与需要的类联系。
假设我们想有一个Sreen对象观察Point对象的变化,当Point是一个存在的类。我们可以通过书写一个方面,由这个方面声明Point对象有一个实例字段observers,用来保存所有观察Point对象的Screen对象的引用,从而实现这个功能。
Aspect PointObserving{ Private Collection Point.observers=new ArrayList(); …… } observers字段是私有字段,只有PointObserving能使用。因此,要在aspect中加入方法管理observers聚集。 Aspect PointObserving{ Private Collection Point.observers=new ArrayList(); Public static void addObserver(Point p,Screen s){ p.observers.add(s); } public static void removeObserver(Point p,Screen s){ p.observers.remove(s); } …… }
那么如何使用AspectJ?
模拟一个普通程序: 服务类UserService: public class UserService{ public int addUser(){ System.out.println("模拟添加用户的方法。"); return 20; } public void validateLogin(){ System.out.println("验证用户登录。"); }} 服务类BookServce: public class BookService{ public int addBook(String name,int price){ System.out.println("正在添加图书,书名是:"+name+",价格是:"+price); return 100; }}
AOP是什么意思
AOP为Aspect
Oriented
Programming的缩写,是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
AOP的出现弥补了OOP的这点不足,AOP
是一个概念,一个规范,本身并没有设定具体语言的实现,AOP是基于动态代理模式。AOP是方法级别的,要测试的方法不能为static修饰,因为接口中不能存在静态方法,编译就会报错。
AOP可以分离业务代码和关注点代码(重复代码),在执行业务代码时,动态的注入关注点代码。切面就是关注点代码形成的类。Spring
AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。
扩展资料
AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ。而动态代理则以Spring
AOP为代表,静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。
静态代理是编译阶段生成AOP代理类,也就是说生成的字节码就织入了增强后的AOP对象;动态代理则不会修改字节码,而是在内存中临时生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
参考资料来源;搜狗百科--AOP

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00






