我是靠谱客的博主 要减肥鸡翅,最近开发中收集的这篇文章主要介绍SpringAOP之动态代理前提,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前提

最近看到Spring-Aop(面向切面编程)的实现基于动态代理,特此记录学习一下。

什么是动态代理?

  • 代理:当目标对象无法直接访问,创建一个客户端和目标对象之间的中介,这个中介可以被称为代理。
  • 动态: 使用反射机制,在程序执行的时候,创建代理类对象。
    动态代理:在程序执行中,利用jdk的反射机制,创建代理类对象,并动态指定要代理的对象

动态代理的作用

  1. 在不改变已有代码的基础上,通过代理来横向拓展增强其他的功能;
    (A写好了一个功能,你可以使用,但是A的功能不满足你的要求,因此可以通过代理A的功能代码,而不用修改原有的代码进行增加)
  2. 当目标类不允许直接访问(a类实现功能调用c类,但c类不允许a调用),因此可以创建代理b,让a访问b,b再访问c;
  3. 减少重复的代码;
  4. 专注业务逻辑代码;
  5. 解耦,让业务代码与非业务代码分离。

实现代理的方式?

1.静态代理

特点:

  • 代理类需要自己手动创建
  • 被代理的目标类是确定的

缺点:

  • 当需要被代理的目标类增加时,代理类也会成倍增加
  • 当接口中功能增加或者修改,对代理类、被代理类都会造成影响

2.动态代理

方式1:jdk动态代理
具体:基于java.lang.reflect的三个类:

  • invocationHandler
  • Method
  • Proxy

要求:目标类是一个实现接口类,必须实现某个接口
方式2:cglib动态代理
要求:目标类能被继承,即class和method不能是final

3.具体实现步骤

jdk动态代理实现步骤:

  1. 创建接口,定义目标类要实现的方法(功能)
  2. 创建目标类实现接口
  3. 创建InvocationHandler接口的实现类(代理类),重写invoke方法,在方法中完成需要代理的功能;
  4. 利用Proxy类创建代理对象------>newProxyInstance
  5. 类加载器实现接口给代理对象
  6. 利用代理对象调用目标类方法,自动调用invoke方法,使功能增强。

最后

以上就是要减肥鸡翅为你收集整理的SpringAOP之动态代理前提的全部内容,希望文章能够帮你解决SpringAOP之动态代理前提所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部