AOP面向切面编程
- AOP概念
- 简介
- 内部原理
- JDK动态代理
- CgLib动态代理
- 相关术语
- Spring-aop使用
- 搭建项目
- 编写切面类
- 配置
- aop配置
- 切入点
- 切面
- aop注解方式
1
AOP概念
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP内部原理(动态代理)
在传统开发中去增强一个方法的功能,是采用纵向继承的方式给方法加上扩展功能,缺点是需求变化时就需要去修改业务类方法中的内容(去掉扩展功能或者换成另一个功能)
而采用AOP则是生成代理类来增强功能,不用修改原类
JDK动态代理
使用JDK动态代理需要实现接口的类才能被动态代理
给work方法增加study功能
测试
cglib动态代理
cglig是一个第三方开源代码 生成类库,动态添加类的属性和方法。在spring的核心包当中已经引入了cglib,采用的是继承方式来产生的代理对象
Spring的AOP简介
AOP思想最早是由AOP联盟组织提出的
Spring使用这种思想最好的框架
AspectJ
Spring的AOP有自己的实现方式,但是这种方式非常繁琐
AspectJ 是一个AOP的框架
Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发
相关术语
1.Joinpoint:连接点
可以被拦截到的方法
能够被增强的方法,这些方法就可以称为是连接点
比如下面的work方法就是接入点,它可以被增强
2.Pointcut:切入点
连接点是可以被增强的方法,切入点是已经被增强了的方法
3.Advice:通知
增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知
4.Introduction:引介
类层面的增加
给原有的类添加一些新的属性方法
在开发中通常都是给方法进行增加
5.Target:被增加的对象
6.Weaving:织入,将通知应用到目标对象的过程
7.Proxy:代理对象
8.Aspect:切面,多个通知和多个切入点的集合
2
Spring-AOP使用
新建项目-导包-配置文件
后四个是Spring核心包,前面是AOP需要的
配置AOP有关约束
applicationContext.xml
编写切点与切面类
把work方法作为切入点
然后有一个切面里面有多个通知
配置(指定哪个切入点添上哪个通知)
测试
结果(添加成功)
3
AOP配置
配置切入点
id给每个切入点取的唯一标识,expression指定切入点通过execution函数来完成:【访问修饰符】 方法返回值 包名.类名.方法名(参数)
切入面配置
ref指定切入面:前面配置好的id名
method:选择哪个通知
poincut-ref:选择加到哪个切入点(切入点的id)
通知类型
before:前置通知,即在原方法体前加上通知
after-returning:后置通知
around:环绕通知,前后都加一条
after-throwing:异常通知,程序异常时加上此通知
after:最终通知,原方法有无异常通知都会执行上去
4
AOP注解方式ApsectJ开发
在配置文件开启使用
在切面类的通知上添加注解
把通知2添加到work方法
注解AOP通知类型
@Before前置通知
@AfterReturning后置通知
@Around环绕通知
@AfterThrowing异常抛出通知
@After最终通知