Spring AOP 总结


AOP
面向切面编程,基于动态代理和职责链模式,底层实现有 jdk, cglib 两种方式, 把系统级功能从应用逻辑中抽离出来,封装在通知/增强( Advice )里,例如权限控制,申明式事务

AOP 的使用
1.注解开启 aop
@EnableAspectJAutoProxy
动态注册 aop 入口类 AnnotationAwareAspectJAutoProxyCreator
2.扫描切面类
@ComponentScan(basePackages = {"com.xiangxue"},
includeFilters = {
    @ComponentScan.Filter(
        type=FilterType.ANNOTATION,classes=Aspect.class)})
3.编写切面
定义 Pointcut(切点) 和 Advice (通知/增强)

AOP 的实现原理
Spring AOP 是依赖 JDK 动态代理 和 CGLIB 代理 实现的
JDK 动态代理 proxyTargetClass = false
实现 InvocationHandler,代理对象必须是某个接口的实现,在运行期间创建一个接口的实现类
CGLIB 代理
实现 MethodInterceptor,在运行期间生成目标类扩展的子类

Target (目标对象)
被代理对象,被通知 (Advice) 对象

Proxy (代理)
将通知织入目标对象之后,形成代理对象

Joinpoint (连接点)
目标对象中,所有可以增强的方法

Pointcut (切点)
切点表达式匹配上的连接点

Weaving (织入)
将通知应用到切点的过程

Advice 通知/增强, 在特定 Joinpoint (连接点) 上执行的方法,有5种类型
before 前置通知, 方法之前执行
after-returning 后置通知, 方法正常完成后执行
after-throwing 异常通知, 方法抛出异常时执行
after 最终通知, 方法完成时执行
around 环绕通知, 方法调用前后

Introduction (引入), 添加额外的方法或者属性到被通知的类
@Aspect 切面, 由 Advice 通知 和 Pointcut 切点 组成
advisor (通知/增强器), 由 Advice 通知 和 Pointcut 切点组成

切面 (Aspect) 里的通知 一般的 bean 就行,通知器(advisor) 里的通知必须实现 Advice 接口
切面 (Aspect) 用于日志,缓存,通知/增强器 (advisor) 用于事务管理


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我三师弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值