请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 416|回复: 0

Spring AOP原理及AspectJ基于xml的实现实例

[复制链接]

30

主题

35

帖子

183

积分

注册会员

Rank: 2

积分
183
发表于 2022-5-9 19:45:29 | 显示全部楼层 |阅读模式
实现原理
Spring AOP实现机制是采用的动态代理和字节码生成技术实现的;AspectJ采用的是用编译器将横切逻辑织入到目标对象,动态代理和字节码生成技术是在运行期间为目标对象生成一个代理对象而将横切逻辑织入到这个代理对象中,系统最终使用的是织入了横切逻辑的代理对象,而不是真正的目标对象。
Spring AOP和AspectJ的区别
Spring AOP 基于动态代理方式实现;AspectJ 基于静态代理方式实现,因为上面已经提到实际上aspectj是由编译器完成,也就是说它是在编译期完成的增强;而Spring AOP是通过动态代理和字节码生成技术实现,这两个都是动态插入增强逻辑的,所以是动态的
Spring AOP 仅支持方法级别的 PointCut;提供了完全的 AOP 支持,它还支持属性级别的 PointCut。
核心成员
    Join Point(连接点)
    在系统运行之前将AOP模块织入到OOP模块中的系统执行点,即将在上面进行织入操作的系统执行点。
    Pointcut(切点)
    Pointcut代表的是Joinpoint的表达方式,定义了相应的Advice将要发生的地方;将横切逻辑织入当前系统时,需要参照Pointcut规定的Joinpoint的信息,才可以知道应该往哪些Join上织入横切逻辑。 可以直接指定Joinpoint所在的方法名称,还可以用正则表达式来匹配;同时还支持特定专门表达语言
    Advice(增强)
    Advice是单一横切关注点逻辑的载体,定义了织入切点中代码具体要做的事,可以分为四种Advice,用来区分发生的具体时间还是执行别的代码
    Before Advice
    即在JoinPoint指定位置之前执行的Advice类型,在Before Advice执行完成之后,程序继续执行Joinpoint处继续执行
    After Advice
    在相应连接点执行之后执行的Advice类型
    Around Advice
    Around对其附加的Joinpoint进行包裹,可以在Joinpoint之前和之后都指定相应的逻辑,甚至于中断或者忽略Joinpoint处原来程序的执行
    Introduction
    Introduction可以为原有的对象添加新的特性或行为,属于per-instance的Adv-ice类型,它不会在目标类的所有实例之间共享,而是会为不同的实例对象保存它们各自的状态以及相关的逻辑;其余三种属于per-class类型的,是会在目标对象中间共享的
    Aspect(切面)
    Aspect是对系统中的横切逻辑点进行模块化封装的AOP实体概况,可以比作类,其中的包含了Advice和PointCut,而Advice就是Aspect中的方法
    weaving(织入和织入器)
    主要功能是将Aspect和其他对象连接起来,并创建织入(Weaving)就是把Aspect横切关注逻辑集成到现存系统中;完成织入过程的工具就叫织入器(Weaver),AspectJ有专门的工具来完成织入操作,即ajc,ajc是Aspect的织入器;JBOSS AOP采用自定义的类加载器来完成织入,自定义的类加载器就是它的织入器;Spring AOP采用ProxyFactory来完成最终的织入操作,所以Spring AOP通用的织入器就是ProxyFactory类
    Target(目标对象)
    符合Pointcut所指定的条件,将在织入过程中被织入横切逻辑(即Advice)的对象,就是目标对象。
实现:采用XML文件配置的方式:
当采用基于配置文件来配置Spring aop时,所有的关于Spring aop的配置都必须写在标签元素中,声明一个切面采用元素来定义,例如:

目标类:

aspect 切面类:

日志类:

xml方式测试类与结果:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-1-30 16:26 , Processed in 0.051723 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表