02-aop简介-aop的作用及其优势_哔哩哔哩_bilibili 122
1、Spring的aop介绍
1.1aop是一种技术,aop是在运行之间执行的,他可以完成程序功能之间的松耦合,动态代理的作用也等同于Aop的作用:他提供了相应的封装,Aop是面向对象编程
2、查询数据的方法:这些方法我都需要一个日志的控制,我去保存,我去记录一下当前日志控制时间的进度
2.1 优势:抽取了代码,便于维护
3、画一个图看一下,在我们的业务仓,有个serive方法()
3.1
4、aop诞生的意义,一个方法,对应一个日志控制,100个,对应100个日志控制,不好维护
5、后期引用的话,会方便很多,但是
6、有没有什么办法,在运行期间解耦合
6.1
7 AOP的核心就是完成一种动态结合的技术
8、切面指的是目标方法
8.1 功能增强方法:
9、AOP的底层实现----介入是核心
9.1 JDK代理,基于接口,生成代理的对象,他的缺点是必须有一个接口,如果没有接口就没办法代理
9.2 cglib代理,我必须有一个儿子
10、要增强方法
11、注意cglib不是继承
--------12aop底层代码书写
12.1
13 JDK代理实现步骤
13.1 动态代理的角色,需要几个角色,有接口,有目标对象,
14、第一步,建好工程,先建个包:在java下建个package的包
14.1、
14.2 建好包之后,弄一个目标接口:
14.3 接口中方法不多写,意思意思就行了
14.4 写完接口之后,再写一个实现类
14.5 写完这个接口,这个类要继承我们写的接口,同时写
14.6 alt+enter 实现我们的方法:
15、现在你可以单独建一个增强:增强或者建议
15.1
15.1 增强方法的完整写法:
16、现在我想增强save()方法
17、建我们的测试
17.1、这里不用写了,不用导入,可以直接写
17.2
17.3 有三个参数,第一个里面是目标对象的内加载器,第二个是目标对象相同的接口字节码对象数组,第三个方法是接口
17.4 当前执行的目标方法,args代表传入的参数
17.5 两个invoke不一样
17.6 执行谁的,另一个是参数
18、他们最终生成的就是代理对象
18.1、用它接收行不行,他报错可以利用强转
18.2 动态生成的代理对象,他们之间的关系是兄弟关系,如果是兄弟关系,我们用谁去接收
18.3 这种写法正确
19、我问你代理对象啥方法,接口啥方法,代理对象啥方法
20、执行看看
20.1 save run 他打的
20.2 下一步我要对这个目标进行增强
20.3 增强之前我已经把他放到一个类当中了
21、获得advise
21.1 获得增强对象
21.2 这里调用advise的before方法
21.3 再调用其他方法
22、给他弄一个返回值
23、给他写一个null的返回值
23.1 很多都用到上面的jdk代理,代码要看懂
------ spring可以集成第三方的cglib,如果第三方没有接口
25、cglib第一件事情,可以导入cglib的jar包,先找到我们的pom.xml,我们事先导入了context这个配置
25.1 有一个core的核心
26、我们再看一下左边
27、我们看一下core
27.1 你可以看到spring有那个cglib第三方的包,现在sprng已经集成了我们的包了
27.2 java下建一个package的包
28、cglib想要完成得需要几个角色呀
29、三个部分都要,最终测试,类,等,接口不要
30、有的地方,同样有前置和后置
30.1 第一步创建增强器,创建 Enhancer
30.2 设置父类目标,为增强器设置他set他爹
他爹是target
30.3 、第三步设置setcallback
30.3.1 callback,ctrl + D点进去