java&代理

我所了解的代理

正向代理
反向代理
代理模式
静态代理
java动态代理
cglib代理
代理名词解释,啥是代理,就好比我吃饭,吃饭没人能代劳吧,但你如何能吃到饭,这个却有很多方式方法吧,你自己“亲自”去饭店吃饭,你点外卖,让人给你送;这个就是代理,代替你去把饭领上,给你送过来,就是代理,代嘛,代替的意思,我理解的代理就是别人替你干了某某事情,就是代理。

正向代理

与反向代理对应,所有直接能访问的都是正向代理,所有直接访问中间件(服务器)的都是

反向代理

nginx、F5基于软件和硬件的两种典型反向代理工具,你以为你是直接访问的服务器,实际上你反问的是一个中间商(代理、中介、中间人),总之你不知道你真正的对象是谁的,都是反代。

代理模式

上面两个是指用户和服务器的连接方式,而下面的都与代理模式有关。大方向静态,动态,其中动态又分java动态和cglib。
java中的代理模式:

*定义:给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用

*目的:①:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性

②:通过代理业务对原有业务进行增强

java当中有三种方式来创建代理对象:静态代理,基于jdk(接口)的动态代理,基于CGLLIB(父类)的动态代理。

相关概念:

目标类:原对象,我们需要代理对象控制他的访问,拓展其功能。

代理类:代理模式产生的对象,是原对象“替身”,已经在原有基础上修改逻辑

静态代理

代理类和目标类都实现同一个接口,代理类能在目标类的基础上进行额外的操作。我们可以在调用代理对象方法之前、之后加上额外的代码。例如可以在调用前后记录时间来监测接口所花费的时间、在调用前后加入日志处理来跟踪接口调用情况、在调用之前加入权限控制的代码、调用之后对返回结果信息进行脱敏处理等等。
静态代理就是程序员在编写代码的时候就已经把代理类的源码写好了,编译后就会生成.class文件。
简单代码实现
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。

java动态代理

静态代理存在弊端。只有当代理类能够被继承并重写,或者代理类存在接口能够被委托类实现的情况下才能够实现;同时,如果需要实现很多代理类,意味着需要很多额外的代码,维护起来比较麻烦。而动态代理可以动态生成代理类,解决了需要✍️大量静态代码的问题。
在java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。
代理类可以看成是中间类,它持有被代理对象,把外部对invoke的调用转为对被代理对象的调用。而代理类通过持有中间类,调用中间类的invoke方法,来达到调用被代理类的方法的目的。就和nginx代理感觉上相同,你以为你是调用的代理类的方法,而实际上代理类又去通过反射调用了被代理类的这个方法,真正干活的是被代理的方法!

cglib代理

java 的动态代理需要被代理类实现接口,如果被代理类没有实现接口,它就无法代理了,所以就有个这个cglib;Cglib代理也叫作子类代理,他是通过在内存中构建一个子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,然后加入自己需要的操作。因为使用的是继承的方式,所以不能代理final 类。

动态代理与CGLib动态代理都是实现Spring AOP的基础。如果加入容器的目标对象有实现接口,用动态代理,如果目标对象没有实现接口,用Cglib代理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值