AOP简介
在软件业,AOP为Aspect Oriented Programming的缩写。
意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
代理模式:JDK动态代理、cglib动态代理
cglib动态代理:
Cglig是一个第三方开源代码 生成类库,动态添加类的属性和方法。
在spring的核心包当中已经引入了cglib
采用的是继承方式来产生的代理对象
AOP相关术语
Joinpoint:连接点
可以被拦截到的方法
能够被增强的方法,这些方法就可以称为是连接点
Pointcut:切入点
真正被拦截的方法
真正被增加的方法
Advice:通知
增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知
Introduction:引介
类层面的增加
给原有的类添加一些新的属性方法
在开发中通常都是给方法进行增加
Weaving:织入
将通知应用到目标对象的过程
Proxy:代理对象
Aspect:切面
多个通知和多个切入点的集合
Aop约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
配置AOP完成对目标产生代理
AOP通知类型
前置通知:在目标方法执行之前进行操作
后置通知:在目标方法执行之后 进行操作
环绕通知:在目标方法执行之前 和之后进行操作 需要参数 ProceedingJoinPoint joinPoint
异常抛出通知:在程序出现异常时进行操作 获取异常参数Throwable excetion xml添加 throwing="形参名字"
最终通知:无论代码是否有异常,都会执行
在配置文件中开启以注解形式
在切面类上添加注解
定义多个切入点
一个通知同时定义到多个方法当中
首先可以写个空方法来直接使用定义好的切入点表达式
接着就可以在切入点方法上添加了(类.方法)
当使用接口时与不使用接口内部代理区别
用接口的实现的代理是JDK动态代理
不使用接口会选择CGLI代理(CGLI是使用继承的方法)