一、aop思想
面向切面编程思想
纵向重复,横向抽取(servlet、service、拦截器)
二、Spring中aop概念
Spring能够为容器管理的对象生成动态代理对象
以往在使用动态代理,需要调用:Proxy.newProxyInstance(xx,xx,xx)生成代理对象
Spring能为我们生成代理对象
三、Spring实现aop的原理
1.动态代理(优先使用)
被代理对象必须要实现接口,才能产生代理对象,如果没有接口,将不能使用动态代理技术
2.cglib代理(没有接口)
第三方代理技术,cglib代理,可以对任何类生成代理。
代理原理:对目标对象进行继承代理
如果目标对象被final修饰,那么该类无法被cglib代理
UserService.java(interface)
UserServiceImpl.java
动态代理:UserServiceProxyFactory.java
动态代理:Demo
cglib代理:UserServiceProxyFactory2.java
cglib代理:Demo.java
四、Spring的aop名词解释
1.Joinpoint(连接点):目标对象中,所有可以增强的方法
即save()、delete()、update()、find()
2.Pointcut(切入点):目标对象中,已经增强的方法
即save()、delete()、update()、find()
3.Advice(通知/增强):增强的代码
System.out.println("打开事务");
System.out.println("提交事务");
4.Target(目标对象):被代理对象
UserServiceImpl
5.Weaving(织入):将通知应用到切入点的过程
UserServiceImpl到save()、delete()、update()、find()的过程
6.Proxy(代理):将通知织入到目标对象之后,形成代理对象。
即usProxy
7.aspect(切面):切入点+通知
五、Spring的aop准备—导包&定义通知
1.步骤
(1)导包4+2+2+2
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200617111717258.png)
Spring需要的第三方aop包
(2).准备目标对象
(3).准备通知
前置通知:目标方法运行之前调用
后置通知:(如果出现异常,不会调用)目标方法运行之后调用
环绕通知:目标方法运行之前和之后都调用
异常拦截通知:如果出现异常,就会调用
后置通知:无论是否出现异常都会调用
(4).配置进行织入,将通知织入目标对象
2.测试
六、Spring的aop整理总结
aop 面向切面编程思想
纵向重复,横向抽取
动态代理
通过动态代理可以提现aop思想
对目标对象中的方法进行增强
Spring aop开发
Spring封装动态代理的代码,我们不需要手写动态代理代码
且封装了cglib代理
即看可以任何类进行代理增强
Spring中的名词