首页 > 编程知识 正文

springaop用法,aspectj框架

时间:2023-05-06 17:22:42 阅读:20663 作者:667

面向切割面编程(AOP )是通过允许跨关注点的分离来提高模块化的编程范例。 AOP提供了将对象之间的关注点模块化的切面。

AOP实现的是根据我们编写的代码进行一定的包装处理,例如在方法执行前、执行后或执行过程中发生异常后。 称为扩展处理

Aop概念

Pointcut :基于正则表达式的(组)表示,有点绕圈子。 也就是说,他自己是表达,但他是基于正规语法的。 通常,pointcut会选择程序中的几个感兴趣的执行点或程序执行点的集合。

连接点: pointcut选择的集合中的具体执行点称为连接点。

Advice :在选定的连接点上执行的操作,逻辑。 对于五种类型,我很少说,但不懂的同学会自己补充基础。

Aspect :是我们关注点的模块化。 该关注点可能跨越多个对象和模块,事务管理是跨越关注点的好例子。 这是一个抽象的概念,从软件的角度来看,是指APP应用程序的各个模块中的任何一个领域或方面。 它还由pointcut和advice组成。

Weaving :将切片应用于目标对象以创建新advised对象的过程。

AspectJ是一个易于使用的强大的AOP框架

AspectJ的全名是Eclipse AspectJ,官方网站地址为1.9.0,目前最新版本

引用官方网站的说明:

aseamlessaspect-orientedextensiontothejavatmprogramminglanguage (基于Java平台的面向断开编程的语言) () ) ) ) ) ) ) ) ) )

javaplatformcompatible (与Java平台兼容,可无缝扩展) ) ) ) )。

() ) ) )。

可以单独使用,也可以集成到其他框架中。

单独使用AspectJ时,需要专用的编译器ajc。

java的编译器是javac,AspectJ的编译器是ajc,aj是首字母缩写,c是compiler。

和AspectJ

作为Java开发人员,我相信我们熟悉一个叫Spring的框架。 Spring框架具有AOP这一主要功能,说起AOP,人们往往会想到AspectJ。 让我们简单比较一下AspectJ和Spring AOP :

Spring AOP

1 .基于动态代理实现。 缺省情况下,使用接口时用JDK提供的动态代理实现,方法时用CGLIB实现

2、Spring AOP需要依赖IOC容器进行管理,只能作用于Spring容器,通过纯Java代码实现

3、性能方面,Spring AOP是基于动态代理实现的,所以容器启动时需要生成代理实例,方法调用也会增加堆栈深度,Spring AOP的性能不如AspectJ好

AspectJ

AspectJ来自Eclipse基金会

AspectJ是静态组织,通过修改代码来实现,具有以下组织时机。

1、编译期组织(Compile-time weaving ) :如果a类使用AspectJ添加属性,b类引用该属性,则该场景在需要编译期时组织,否则编译b类

2、编译后的组织(Post-compile weaving ),也就是说,生成了. class文件,或者是jar包。 在这种情况下,如果我们需要加强处理,就用于编译后的织入。

3、等级加载后的编织(Load-time weaving ) :指等级加载时进行编织。 实现这一时期的穿插有几种常见的方法。 1、定制班级加载器做这个。 我认为这是最容易考虑的方法。 在将组织的类加载到JVM中之前加载它。 这样,可以在加载时定义行为。 2、JVM启动时指定AspectJ提供的代理:-javaagent : XXX/XXX/AspectJ weaver.jar。

AspectJ可以用Spring AOP做不到。 它是AOP编程的完整解决方案,Spring AOP致力于解决企业级开发中最常见的AOP。 而不是成为像AspectJ那样的AOP方案

由于AspectJ在实际运行之前已完成组织,因此生成的类没有额外的运行时开销

比较总结

下表总结了Spring AOP和AspectJ之间的主要区别:

Spring AOP

AspectJ

在纯Java中实现

使用Java编程语言的扩展实现

不需要单独的编译过程

除非设置LTW,否则需要AspectJ编译器(ajc )

仅可使用运行时编织

不能使用运行时编织。 支持编译时、编译后、加载时的编织

功能不强-仅支持方法级组织

更强大-允许组织字段、方法、构造函数、静态初始值设置项、最后一个类/方法等。

只能在Spring容器管理的bean中实现

可以在所有域对象中实现

仅支持方法的执行起点

支持所有切入点

代理由目标对象创建,片应用于这些代理

在执行APP应用程序之前(执行时),各方面直接编入代码中

比AspectJ慢多了

提高性能

易于学习和应用

比Spring AOP更复杂

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。