1.3 Spring框架 --AOP面向切面编程

1.AOP的意义:

AOP切面编程,是对面向对象(oop)的补充,采取横向抽取机制,将事务处理、日志记录等在业务逻辑中重复出现的代码抽取出来,避免代码冗余,方便以后维护。

2.AOP涉及到的一些概念:

切入点:pointcut ,切面与程序的交叉点
切面: Aspect,封装的用于横向插入的系统功能(如事务处理、日志等)

3.Spring框架中的AOP使用动态代理实现的;动态代理分为:JDK代理 和 CGLIB代理

基于JDK代理的AOP:

一般代理的目标类,实现了业务接口(userDaoImpl类),可以使用JDK代理方式(Spring默认使用JDK代理),代理后的userDao1在调用addUser等方法时,会先触发JdkProxy的invoke方法,如下:

在这里插入图片描述

基于CGLIB代理的AOP:

对于没有实现业务接口的类(userDao),只能使用CGLIB代理方式。代理后的userDao1在调用addUser等方法时,会先触发cglibProxy的intercept方法,如下:

在这里插入图片描述

4.通过XML配置文件,使用 ProxyFactoryBean类来 获取切面增强后的目标类 :

在这里插入图片描述

5.Spring 2.0 以后提供了一个AOP框架

(1)基于XML文件的AspectJ:

在XML文件中首先引入切面类(myAspect)、目标类(userDao)>配置切面(aop:aspect)>配置切入点(aop:pointcut)==>关联切入点通知类型(前置aop:before、后置aop:after-returning、环绕aop:around……),如下:

在这里插入图片描述

(2)基于注解的声明式AspectJ

避免XML的AspectJ的配置文件,太臃肿,难以维护;使用注解在切面类(myAspect)中直接定义切入点(myPointCut),并将通知类型(@Before、@AfterReturning……)写在切面类的方法上,在XML文件中指定扫面指定package下的注解,程序将自动完成目标类的切面增强,如下:

在这里插入图片描述

关于一些AspectJ的常用注解:

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章