Skip to content
闸总博客

欢迎访问闸总博客

  • 首页
  • 会员中心
    • 登录
    • 订单查询
  • 技术学习
    • 技术类
      • JAVA
      • python
      • 运维相关
      • 数据库
      • 虚拟机玩法
      • 手机玩法
      • 其他
    • 计算机类
      • 计算机组成原理
      • 计算机网络
      • 操作系统
      • 数据结构
    • 关于vps分享
      • vps信息测试
      • vps玩法
    • 源码搭建教程
    • 各种工具软件
    • 其他分享
  • 游戏信息
    • pc游戏
    • 主机掌机游戏
    • 手机游戏
  • 动态交流
  • 论坛
    • 交流讨论
    • 羊毛福利
    • 源码分享
      • JAVA源码
      • python源码
      • U3D源码
      • 网站源码
      • h5游戏源码
      • 文字游戏源码
      • 手游源码
    • 资源分享
      • 教学
      • 书籍
      • 影音
      • 游戏
      • 软件
    • 资讯信息
      • 影剧
      • 游戏
      • 3C
      • 动画
  • 知识库
    • 闸总博客
    • 技术
      • Java
      • HTML/CSS
  • 商店
    • 闸总博客 zhazong710
      • 闸总博客 zhazong710
      • 闸总电影
      • 闸总小漫画
    • 微软 Microsoft
    • 谷歌 Google
    • 蒸汽 Steam
    • 任天堂Nintendo
      • 宝可梦Pokemon
    • 其他 Other
      • B站 Bilibili
      • 沪江网校
  • 子站
    • 站内游戏
      • 闸总博客2Moons
      • 闸总绿色传奇
      • 闸总寻仙纪
    • 站内页面
      • 闸总音乐
      • 闸总随机XJJ
      • 闸总舔狗日记
      • 闸总买家秀图片
      • 闸总营销号生成器
    • 站内小游戏
      • 闸总魔塔
      • 闸总人生重开模拟器魔改版
      • 闸总小游戏集合
      • 闸总miku减压
      • 闸总扫雷
      • 闸总2048
      • 闸总欧派合成
  • 0
0 菜单 关闭
  • 首页
  • 会员中心
    • 登录
    • 订单查询
  • 技术学习
    • 技术类
      • JAVA
      • python
      • 运维相关
      • 数据库
      • 虚拟机玩法
      • 手机玩法
      • 其他
    • 计算机类
      • 计算机组成原理
      • 计算机网络
      • 操作系统
      • 数据结构
    • 关于vps分享
      • vps信息测试
      • vps玩法
    • 源码搭建教程
    • 各种工具软件
    • 其他分享
  • 游戏信息
    • pc游戏
    • 主机掌机游戏
    • 手机游戏
  • 动态交流
  • 论坛
    • 交流讨论
    • 羊毛福利
    • 源码分享
      • JAVA源码
      • python源码
      • U3D源码
      • 网站源码
      • h5游戏源码
      • 文字游戏源码
      • 手游源码
    • 资源分享
      • 教学
      • 书籍
      • 影音
      • 游戏
      • 软件
    • 资讯信息
      • 影剧
      • 游戏
      • 3C
      • 动画
  • 知识库
    • 闸总博客
    • 技术
      • Java
      • HTML/CSS
  • 商店
    • 闸总博客 zhazong710
      • 闸总博客 zhazong710
      • 闸总电影
      • 闸总小漫画
    • 微软 Microsoft
    • 谷歌 Google
    • 蒸汽 Steam
    • 任天堂Nintendo
      • 宝可梦Pokemon
    • 其他 Other
      • B站 Bilibili
      • 沪江网校
  • 子站
    • 站内游戏
      • 闸总博客2Moons
      • 闸总绿色传奇
      • 闸总寻仙纪
    • 站内页面
      • 闸总音乐
      • 闸总随机XJJ
      • 闸总舔狗日记
      • 闸总买家秀图片
      • 闸总营销号生成器
    • 站内小游戏
      • 闸总魔塔
      • 闸总人生重开模拟器魔改版
      • 闸总小游戏集合
      • 闸总miku减压
      • 闸总扫雷
      • 闸总2048
      • 闸总欧派合成

闸总博客

1
  • 闸总博客

技术

12
  • Java
    • Java简介
    • Java入门
    • 数据类型与运算符
    • 包、接口、部分关键字
    • Object类、包装类型wrap、内部类、枚举
    • 异常
    • 常用类String
    • 常用类日期、数字
  • HTML/CSS
    • HTML简介
  • Spring
    • Spring 简介
    • IOC(控制反转)
    • AOP(面向切面编程)
View Categories
  • Home
  • docs710
  • 技术
  • Spring
  • AOP(面向切面编程)

AOP(面向切面编程)

闸总710
更新 2022年1月17日

< 1 min read

AOP本质 #

AOP(Aspect Orient Programming)也就是面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式。其实AOP问世的时间并不太长,AOP和OOP互为补充,面向切面编程将程序运行过程分解成各个切面。

AOP专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。

  1. 面向切面编程, 利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分的耦合度降低, 提高程序的重用性。
  2. 不修改源代码方式, 在主干功能中添加新功能, 利用的是动态代理模式。

AOP只是增强了方法, 使用还是与Bean管理一样

AOP的基本概念 #

AOP操作术语 #

关于面向切面编程的一些术语:

  • 切面(Aspect): 切面用于组织多个Advice,Advice放在切面中定义。
  • 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
  • 增强处理(Advice): AOP框架在特定的切入点执行的增强处理。处理有”around”、”before”和”after”等类型
  • 切入点(Pointcut): 可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。
  1. 连接点类中可以被增强的方法
  2. 切入点实际被增强的方法
  3. 通知(增强)实际增强的逻辑部分
  4. 切面把通知应用到切入点的过程

通知的类型: #

(1) 前置通知 @Before

(2) 后置通知 @AfterReturning

(3) 环绕通知 @Around

(4) 异常通知 @AfterThrowing

(5) 最终通知 @After

通知的执行顺序 #

正常执行: @Before > @After > @AfterReturning

异常执行: @Before > @After > @AfterThrowing

%title插图%num
AOP顺序图

AOP前置知识 #

  • Spring框架一般都是基于AspectJ实现AOP操作AspectJ不是Spring组成部分, 它是独立的AOP框架, 一般把AspectJ和Spring框架一起使用, 进行AOP操作<!– Maven配置 –>
  • 切入点表达式
  • 切入点表达式的作用: 让AspectJ知道要对哪些方法进行增强

AOP的底层实现原理 #

* JDK动态代理
* cglib动态代理

Spring的AOP的底层采用两种代理机制:
* JDK的动态代理:
* 只能对实现了接口的类生成代理.

  • CGLIB的动态代理:
  • 可以对没有实现接口的类生成代理.(采用的是比较底层的字节码技术,对类生成一个子类对象.)

Spring AOP使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理,之所以需要两种代理机制,很大程度上是因为JDK本身只提供基于接口的代理,不支持类的代理。

基于JDK的代理和基于CGLib的代理是Spring AOP的核心实现技术,认识这两代理技术,有助于探究Spring AOP的实现机理。只要你愿意,你甚至可以抛开Spring,提供自己的AOP实现。

赞分享
更新 2022年1月17日
目录
  • AOP本质
  • AOP的基本概念
    • AOP操作术语
    • 通知的类型:
    • 通知的执行顺序
  • AOP前置知识
  • AOP的底层实现原理
是否有帮助
  • Happy
  • 常规
  • Sad
Copyright © 2020-2025 闸总博客 zhazong710
×

产品入口: 产品添加到购物车