动态代理(AOP),这次包教包会。

动态代理(AOP),这次包教包会。,第1张

动态代理(AOP),这次包教包会。

1.什么是代理?

​ 比如:代理,中介,商家等

例如有一家美国的大学,可以对全世界招生,留学中介(代理)

留学中介(代理):帮助这家美国的学校的学校招生,中介是学校的代理,中介是代替学校完成招生的功能。

代理特点:

  1. 中介和代理他们要做的事情是一致的:招生
  2. 中介是学校的代理,学校是目标。
  3. 家长–中介(学校介绍,办理入学手续)-----美国学校。
  4. 中介是代理,不能白干活,需要收取费用。
  5. 代理不会让你访问到目标。

为什么找中介?

  1. 中介是专业的,方便
  2. 家长现在不能去找学校,家长没有能力访问学校,或者美国的学校不接受个人来访。
  3. 买东西都是商家卖,商家是某个商品的代理,你个人买东西,肯定不会让你接触到厂家的。

2.实际开放中

​ 也会有这样的情况,你有a类,本来是调用c类的方法,完成某个功能,但是c不让a调用。

a--------不能调用c的方法,在a和c之间创建 b代理,c让b访问,a—>访问b---->访问c,实际的例子,登录注册有验证码,验证码是手机短信。中国移动,联通能发短信。

​ 中国移动,联通能有子公司,或者关联公司,他们面向社会提供短信的发送功能,张三项目发送短信------>子公司,或者关联公司--------->中国移动,联通发短信

3.使用代理模式的作用

  1. 功能增强:在你原有的功能上,增加了额外的功能,叫做功能增强
  2. 控制访问:代理类不会让你访问目标

4.实现代理的方式

**4.1.静态代理:**1)代理类是自己手工实现的,自己创建一个Java类,表示代理类

​ 2)同时你所要代理的目标类是确定的。

​ 特点:1)实现简单 2)容易理解

​ 缺点:当你的项目中,目标类和代理类很多的时候,有以下的缺点

​ 1)当目标类增加了,代理类可能需要成倍的增加,代理类数量过多

​ 2)当你的接口增加了,或者修改了,会影响众多的实现类,厂家类,代理类都需要进行更改,影响比较多。(耦合性比较高)

例如:模拟一个用户购买U盘的行为,用户是客户端类,商家是代理,代理某个品牌的U盘,厂家是目标类

​ 三者关系:用户(客户端)---->商家(代理)------->厂家(目标)

​ 商家和厂家都是卖U盘,他们完成的功能是一致的

实现步骤:1.创建一个接口,定义卖U盘的方法,表示你的厂家和商家的事情

​ 2.创建一个厂家类,实现1步骤的接口

​ 3.创建商家,就是代理类也要实现1步骤的接口

​ 4.创建客户端类,调用商家的方法买一个U盘

​ 代理类完成的功能:1.目标类中的方法的调用

​ 2.功能增强

4.2.动态代理

​ 在静态代理中目标类很多的时候,可以使用动态代理,避免静态代理的缺点,动态代理中目标即使很多,1)代理类数量可以很少,2)当你修改了接口中的方法是,不会影响代理类

动态代理:在程序执行过程中,使用Jdk的反射机制,创建代理对象,并动态的指定要代理目标类

换句话说:动态代理是一种创建java对象的能力,让你不用创建Taobao类,就能创建代理类对象。

​ 在Java中,想要创建对象:

​ 1.创建类文件,java文件编译为class

​ 2.使用构造方法,创建类的对象。

动态代理的实现:1.jdk动态代理(理解):使用java反射包中的类和接口实现动态代理的功能

​ 反射包java.lang.reflect,类里面有三个类:InvocationHandler,Method,Proxy

​ 2.cglib动态代理(了解):是第三方工具库,创建代理对象。原理是继承,通过继承目标类,创建他的子类,在子类

​ 中重写父类中同名的方法,实现功能的修改

​ 因为cglib是继承,重写方法,所以要求目标类不能是final的,方法也不能是final的。比

​ 如mybatis,spring框架中都有使用。



演示 *** 作:



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4670266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存