Spring的AOP入门及XML开发以及注解开发

什么是AOP

在这里插入图片描述
AOP的应用场景
在这里插入图片描述如在保存到数据库前需要加上一个权限校验的方法。
以前在每个Dao上去加这个方法,不实际,后来采用了继承的方式,便只是需要修改这个Dao的类就可以了,这是纵向继承的方式。

AOP采用的是横向抽取机制取代了传统纵向继承
横向抽取机制我们可以把它理解为一个代理机制,以前如果客户说要在save方法加入一个权限校验,像纵向继承,还要一个个去extend,如果客户还说不要了,还要一个个去删掉。而AOP如果我们想要在增加权限校验,生成所有dao的代理,访问这个代理对象,如果不想要,就把代理对象去掉就可以了。SpringAOP底层用的就是动态代理的机制,增强我们类里面的方法,但是这个代理在类里面不用我们自己写,只需要配置就可以了。
在这里插入图片描述
在这里插入图片描述
性能控制,在代码进入之前记录一个时间,在结束之后记录一个时间,算出程序的运行时间

Spring底层AOP的实现原理

动态代理:
JDK动态代理:只能对实现了接口的类产生代理。
Cglib动态代理:(类似于Javassist第三方代理技术):对没有实现接口的类产生代理对象。生成子类对象。
在Spring中,若类实现了接口,则默认采用JDK动态代理,若没有实现接口则默认Cglib。

Spring的AOP底层的实现

1.JDK动态代理

JDKProxy就是用JDK动态代理对UserDao产生的代理
在这里插入图片描述
第一个参数是类加载器,第二个参数是接口,第三个参数是真正干活的对象InvocationHandler //真正实现InvocationHandler的类对象
在这里插入图片描述
在这里插入图片描述
原理就是使用JDK原生的Proxy生成我们的代理,在invoke添加我们的方法,然后执行这个代理

2.Cglid动态代理
Cglib:第三方开源代码生成类库,动态添加类的属性和方法,
就是你已经有class(类了),它可以在你这个类基础上进行操作。由于是第三方的,所以要引入包,spring已经引入Cglib的包了
Cglid采用的是继承的方式去产生我们的代理对象,因此要设置父类

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

1.Spring的 AOP的简介
AOP思想最早是由AOP联盟组织提出的。Spring是使用这种思想最好的框架
早期SPring的AOP有自己实现的方式(由于非常繁琐)。AspectJ是一个AOP的框架,Spring引入AspectJ作为自身AOP的开发。

2.AOP相关术语
1.Joinpoint:连接点,可以被拦截的点,(可以被增强的方法)
2.Pointcut:切入点,真正被拦截的点(真正被增强的点)——
3.Advice:通知,增强,所增强的方法就叫为通知 (这是属于方法层面的增强)
4.Introduction:引介。类层面的增强
在这里插入图片描述
3.写完目标类并且配置完成之后,编写一个测试类,使用sping的junit便不用每次都重复创建工厂类

在这里插入图片描述

4.编写一个切面类,写入的是要增加的方法,并且将切面类交给Spring管理
在这里插入图片描述
在这里插入图片描述

这里表达式里save(…)代表任意参数,*代表的是任意返回值

1.前置通知
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.后置通知:可以获得方法的返回值,加入delete是String类型
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3.环绕通知:可以阻止目标方法的执行
在这里插入图片描述
在这里插入图片描述
4.异常抛出通知
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
5.最终通知:相当于finally的内容
在这里插入图片描述
在这里插入图片描述
无论有没有异常,最终通知都会执行

切入点表达式的写法

基于execution的函数完成的
语法:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中*号表示任意

在这里插入图片描述
表示这个包以及它子包下面的所有类的所有方法 …代表开头

在这里插入图片描述
+号代表当前的类和其子类

Spring的AOP的基于AspectJ注解开发

1.编写目标类,切面类并配置,并在切面类上使用注解,由于没实现接口,用的是Cglib
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

假设我有很多个通知都作用于同一个方法,但后来想让这些通知作用于不同的方法,就要到这里一个个去改方法名在这里插入图片描述
这时就可以通过切入点配置去改
只需要改切入点里的方法就可以,就不用再@After,@around这些通知里面改方法
后置通知在注解上这样接收返回值,
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值