JavaEE——Spring:AOP概述及入门

1.AOP的概述

1.1.什么是AOP

AOP面向切面编程,AOP是OOP的扩展和延伸,用于解决OOP开发中遇到的一些问题

1.2.AOP的应用场景

JavaEE——Spring:AOP概述及入门

1.3.Spring底层所使用的AOP的实现原理

底层原理:动态代理

  • JDK动态代理:只能对实现了接口的类产生代理(默认,底层会自动切换)
  • cglib动态代理(类似于Javassist第三方代理技术):对没有实现接口的类产生代理对象,生成该类的子类对象

1.3.1.JDK

JavaEE——Spring:AOP概述及入门
JavaEE——Spring:AOP概述及入门
没使用代理前:
JavaEE——Spring:AOP概述及入门
使用JDK动态代理:
JavaEE——Spring:AOP概述及入门
JavaEE——Spring:AOP概述及入门

1.3.2.cglib

cglib:第三方开源的代码生成类库,动态添加属性和方法
JavaEE——Spring:AOP概述及入门
没使用代理前:
JavaEE——Spring:AOP概述及入门
使用cglib动态代理:
JavaEE——Spring:AOP概述及入门
JavaEE——Spring:AOP概述及入门

2.Spring的AOP开发(AspectJ的XML方式)

2.1.Spring的AOP简介

AOP思想最早由AOP联盟组织提出,Spring是使用这种思想最好的框架

  • Spring的AOP有自己的实现方式(此传统方式非常繁琐,已经弃用)
  • AspectJ是一个非常优秀的AOP框架,所以Spring将其引入使用
  • Spring中有两种AOP开发方式

2.2.AOP相关术语

  • Joinpoint:连接点,可以被拦截(增强)的点
  • Pointcut:切入点,真正被拦截的点
  • Advice:通知、增强(方法层面的增强)
  • Introduction:引介(类层面的加强)
  • Target:被增强的对象,也称目标
  • Weaving:织入,将通知应用到目标的过程
  • Proxy:被增强以后产生的代理对象
  • Aspect:切面,多个通知和多个切入点组合

2.3.Spring的AOP的入门(AspectJ的XML方式)

未使用AOP时:

  • 代码:
    JavaEE——Spring:AOP概述及入门
    JavaEE——Spring:AOP概述及入门
  • 配置文件:
    JavaEE——Spring:AOP概述及入门
  • 测试:
    JavaEE——Spring:AOP概述及入门

使用AOP:

  • 编写一个切面类:
    JavaEE——Spring:AOP概述及入门
  • 配置切面类(将切面类交给Spring):
    JavaEE——Spring:AOP概述及入门
  • 通过AOP配置完成对目标类的代理:
    JavaEE——Spring:AOP概述及入门
  • 测试:
    JavaEE——Spring:AOP概述及入门

2.4.Spring中的通知类型

AspectJ划分通知:

  • 前置通知:在目标方法执行之前进行的操作(可以获得切入点信息)
    JavaEE——Spring:AOP概述及入门
  • 后置通知:在目标方法执行之后进行的操作(可以获得切入点信息,还能获得方法返回值)
    JavaEE——Spring:AOP概述及入门
  • 环绕通知:在目标方法执行之前和之后进行的操作(可以阻止目标方法的执行
    JavaEE——Spring:AOP概述及入门
  • 异常抛出通知:程序出现异常时进行的操作(可以获得异常信息)
    JavaEE——Spring:AOP概述及入门
  • 最终通知:无论代码是否有异常,总会执行(类似finally)
    JavaEE——Spring:AOP概述及入门
  • 引介通知

2.5.Spring的切入点表达式写法

语法(基于execution)的函数完成的:[访问修饰符] 方法返回值 包名.类名.方法名[参数]