概述
前提
最近看到Spring-Aop(面向切面编程)的实现基于动态代理,特此记录学习一下。
什么是动态代理?
- 代理:当目标对象无法直接访问,创建一个客户端和目标对象之间的中介,这个中介可以被称为代理。
- 动态: 使用反射机制,在程序执行的时候,创建代理类对象。
动态代理:在程序执行中,利用jdk的反射机制,创建代理类对象,并动态指定要代理的对象
动态代理的作用
- 在不改变已有代码的基础上,通过代理来横向拓展增强其他的功能;
(A写好了一个功能,你可以使用,但是A的功能不满足你的要求,因此可以通过代理A的功能代码,而不用修改原有的代码进行增加) - 当目标类不允许直接访问(a类实现功能调用c类,但c类不允许a调用),因此可以创建代理b,让a访问b,b再访问c;
- 减少重复的代码;
- 专注业务逻辑代码;
- 解耦,让业务代码与非业务代码分离。
实现代理的方式?
1.静态代理
特点:
- 代理类需要自己手动创建
- 被代理的目标类是确定的
缺点:
- 当需要被代理的目标类增加时,代理类也会成倍增加
- 当接口中功能增加或者修改,对代理类、被代理类都会造成影响
2.动态代理
方式1:jdk动态代理
具体:基于java.lang.reflect的三个类:
- invocationHandler
- Method
- Proxy
要求:目标类是一个实现接口类,必须实现某个接口
方式2:cglib动态代理
要求:目标类能被继承,即class和method不能是final
3.具体实现步骤
jdk动态代理实现步骤:
- 创建接口,定义目标类要实现的方法(功能)
- 创建目标类实现接口
- 创建InvocationHandler接口的实现类(代理类),重写invoke方法,在方法中完成需要代理的功能;
- 利用Proxy类创建代理对象------>newProxyInstance
- 将类加载器和实现接口给代理对象
- 利用代理对象调用目标类方法,自动调用invoke方法,使功能增强。
最后
以上就是要减肥鸡翅为你收集整理的SpringAOP之动态代理前提的全部内容,希望文章能够帮你解决SpringAOP之动态代理前提所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复