SpringAOP学习笔记

一、静态代理

1.首先确定要做的一件事情(接口)在这里插入图片描述
然后就是做这事情的人(实现接口的人)在这里插入图片描述
然后就是帮上面做这事情的人 做事情,这样上面的人就可以不用做。(同样实现接口)在这里插入图片描述
最后是客户来找做这事情的人(找中间商)在这里插入图片描述
2.对上面1.中的静态代理进行再理解
首先确定要做的一件事情(接口)->Service接口在这里插入图片描述
然后就是做这事情的人 ->实现接口的人在这里插入图片描述
然后就是帮上面做这事情的人 做事情,这样上面的人就可以不用做。(同样实现接口)在这里插入图片描述
最后是客户来找做这事情的人 ->找中间商 也就是代理角色在这里插入图片描述
发现:也就是不改变真实角色原先的代码情况下,添加一个日志功能(通过代理角色)

二、动态代理 ->两类: 基于类+基于接口

跟静态代理不同的是,动态代理的代理类是动态生成的,而不是我们直接写好的
·基于类 ->Cglib
·基于接口 ->JDK动态代理 [我们这里使用的就是这种]
·Java字节码实现 ->javassist

需要知道类和接口:代理类Proxy + 调用处理程序(接口)InvoCationHandler
好处:在静态代理好处的基础下,一个动态代理类代表一个接口,一般是对应一类业务
一个动态代理类可代表多个类,只要实现同一个接口

代码:首先确定要做的一件事情(接口)在这里插入图片描述
然后就是做这事情的人(实现接口的人)在这里插入图片描述
然后就是帮上面做这事情的人 做事情,这样上面的人就可以不用做。(同样实现接口)在这里插入图片描述
最后是客户来找做这事情的人 ->找中间商 也就是代理角色在这里插入图片描述
结论:每个代理实例都有一个相对应的关联调用处理实例InvocatIonHandler,
当在代理实例调用方法时,方法将会被编码并分派到其调用处理程序的Invoke()方法。
注意点:应该用共同的接口来转换Proxy的实现类。!!!!!!!重点
因为这边动态代理的是一个接口中的多个实现类,所以转换成接口。
这就是为啥叫做基于接口-JDK动态代理

三、AOP

AOP:面向切面编程,通过预编译方式和运行动态代理实现程序功能的统一维护的技术,
不影响业务代码的情况下,添加新功能的能力。
AOP在Spring中的作用:提供声明式事务,允许用户自定义切面
·横切关注点:跨越应用程序多个模块的方法或功能,即业务无关但需要关注的部分。
比如:日志、安全缓存、事务等等。
·切面(Aspect):横切关注点被模块化的特殊对象。 即它是一个类
·通知(Advice):切面必须要完成的工作。 即它是这个类的方法
·目标(Target):被通知的对象。 即它是接口或者方法
·代理(Proxy):向目标对象应用通知之后创建的对象。 即它是代理类
·切入点(PointCut):切面通知执行的”地点”的定义
·连接点(JointCut):与切人点匹配的执行点

代码:抽象角色(被代理的接口)在这里插入图片描述
真实角色(接口的实现类)在这里插入图片描述
方式一:使用Spring API接口实现
①实现MethodBeforeAdvice接口
在这里插入图片描述

②实现AfterReturningAdvice接口在这里插入图片描述
②Spring配置文件beanS.xml在这里插入图片描述
③测试类在这里插入图片描述
④结果在这里插入图片描述

方式二:自定义类[主要是切面定义]
①自定义类在这里插入图片描述
②Spring配置文件beans.2xml在这里插入图片描述
③测试类在这里插入图片描述
④结果在这里插入图片描述

方式三:注解实现AOP
①注解切面在这里插入图片描述
②Spring配置文件bean3.xml在这里插入图片描述
③测试类在这里插入图片描述
④结果在这里插入图片描述

知识复习图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值