1. 让应用对象只关注自己所针对的业务,其他方面问题(如日志,安全,事物)交由其他应用对象来处理
  2. 将横切关注点与业务逻辑相分离,即面向切面编程
  3. 依赖注入利于应用对象间解耦,切面编程实现横切关注点和他们所所影响的对象之间的解耦
  4. spring 自己实现了一整套 AOP 架构,底层是 jdk 动态代理和 cglib,但后来不理想,所以支持可以集成 aspectj,目前主流是 spring+Aspectj(来自网上)
  5. 软件开发中,分布于应用中多处的功能被称为 “横切关注点”
  6. 继承和委托是最常见的实现重用通用功能的面向对象技术
  7. 横切关注点可以被模块化为特殊的类,这些类被称为切面
  8. “切面” 的工作被称为 “通知”
  9. spring 切面可以应用 5 种类型的通知:
    Before:在方法被调用之前调用通知;
    After:在方法完成之后调用通知,无论方法执行是否成功;
    After-returning:在方法成功执行之后调用通知;
    After-throwing:在方法抛出异常后调用通知;
    Around:通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
  10. 连接点 Joinpoint:连接点是在应用执行过程中能够插入切面的一个点,这个点可以是调用方法时,抛出异常时等,即添加新的行为,是程序执行过程中能够应用通知的所有点
  11. 切点 Pointcut:切点有助于缩小切面所通知连接点的范围
  12. 切面 Aspect:切面是通知和切点的结合
  13. 引入 Introduction:引入允许我们向现有的类添加新方法或属性
  14. 织入 Weaving:织入是将切面应用到目标对象来创建新的代理对象的过程(分为编译期,类加载期,运行期)
  15. 创建切点来定义切面织入的连接点是 AOP 框架的基本功能
  16. AspectJ,JBoss AOP,Spring AOP
  17. Spring AOP 的支持局限于方法拦截,如果超过简单方法拦截的范畴(如构造器或属性拦截),那么应该考虑在 AspectJ 里面实现切面,即将 bean 注入到 AspectJ 切面中
  18. Spring 通知是 java 编写的,Spring 在运行期通知对象,Spring 只支持方法连接点(因为 spring 只支持方法连接点,无法更细粒度的进行拦截)
  19. 使用切点选择连接点,关于 spring aop 的 AspectJ 切点,最重要的一点是 spring 仅支持 AspectJ 切点指示器的一个子集
  20. execution () 指示器是唯一的执行匹配,而其他的指示器都是用于限制匹配的,所以 execution () 指示器是我们编写切点定义时最主要使用的指示器
  21. 编写切点以触发通知,指示器之前可以使用 and/or/not(或 &&/||/!)来连接,即同时使用多个指示器,xml 对 & 有特殊含义,觉得不好,还是用 and 吧
execution(* com.springaop.test.Instrument.play(..)) and within(com.springaop.test.*)
说明:
	方法表达式以*号开始,说明我们不关心方法返回值类型
	我们指定了全限定类名和方法名
	方法参数列表使用(..)标识切点选择任意的play()方法,无论该方法的入参是什么
  1. spring 也可以配置面向自己的 bean () 指示器进行织入
  2. aop 配置元素必须在 aop:config 元素内
  3. <aop:aspect ref="audience"> 元素声明了一个简单的切面.audience 是一个 bean
  4. 注意 DRY(不要重复你自己)原则,如果切点 pointcut 元素内容一致,可以提取出来放到 aop:pointcut 标签,注意设置 id,织入时使用 pointcut-ref 引用 id
  5. 实际我们有时需要在前置通知和后置通知之间共享信息,即可以只有一个方法(此方法包含一个 ProceedingJoinPoint 参数),但它包含多个功能,此时可以使用环绕通知,aop:around
  6. 为通知传递参数
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jalen Chu 微信支付

微信支付

Jalen Chu 支付宝

支付宝

Jalen Chu 公众号

公众号