拦截器,过滤器,回调,反射,静态代理,JDK代理,Cjlib代理

本文深入讲解了回调与静态代理的基本原理及其应用场景。介绍了回调机制如何通过传递函数参数来实现功能扩展,以及静态代理如何通过属性封装来增强目标类的功能。同时,还探讨了动态代理中的JDK代理和CGLIB代理的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、回调原理、静态代理原理

public class CallBackFunction {
public static void main(String[] args) {

    //回调
    ExtendCallClass extendCallClass = new ExtendCallClass();
    CallClass callClass = new CallClass();
    extendCallClass.extendsMothod(callClass);

    //静态代理
    B b = new B();
    A a = new A(b);
    a.method();
}

}

class CallClass{
public void method(){
System.out.println(“回调函数的功能”);
}
}

class ExtendCallClass{
public void extendsMothod(CallClass callClass){
System.out.println(“扩展回调函数前的功能”);
callClass.method();
System.out.println(“扩展回调函数后的功能”);
}
}

interface PublicInterface{
public void method();
}

class A implements PublicInterface{
private PublicInterface publicInterface;

A(PublicInterface pubInterface){
    publicInterface = pubInterface;
}
public void method(){
    System.out.println("代理前功能");
    publicInterface.method();**/*/这里是静态代理,如果用反射,则是可以使用jdk代理,也可以使用cjlib代理***
    System.out.println("代理后功能");
}

//}

class B implements PublicInterface{
public void method(){
System.out.println(“代理功能”);
}
}

回调:

功能:通过传递函数参数B,对B功能运行后,进行结果返回或前后扩展
实质:java不支持函数作为参数,但是支持类做参数,通过类把函数进行传递,达到先完成B功能,再继续A功能的过程
优点:A与B的函数名可以不同,灵活性好

代理:

功能:通过把B当做A的一部分,如变成属性,或者通过反射(JVM运行时通过类加载器,类名),获取到代理类的所有信息(构造,方法,属性),然后进行增强扩展
特点:A代理B时,A的方法一定和B一致,AOP时就是要对B的方法(功能)进行前后拦截增强,方便性好

反射:

反射是代理的主要部分,通过虚拟机获取类信息的过程

jdk代理,cjlib代理:

说到静态代理,看上面的代码类似,但是动态代理,有JDK代理,Cjlib代理
JDK代理:只能实现一个,且代理必须是一个接口实现类,因为jdk代理参数就是一个接口做参数,因此不能代理多个
Cjlib代理:可以实现多个,不限于接口类,但是不能用final类进行代理,
jdk,cjlib本质上就是通过虚拟机,获取到类的class信息,并对类信息进行扩展,修改class字节信息

2、拦截器、过滤器

过滤器实现原理是:回调函数,常用来对URL进行过滤,编码等,可以对Request进来前和response返回客户端前进行修改
在springCloud中,网关Zuul中用到了过滤器,也是用到了回调,但不确定是否也用到了反射

拦截器:AOP原理,其实就是动态代理,代理是基于反射,因此书面上大都讲AOP是基于反射实现的
功能:用于校验授权信息,Zuul就是用了过滤器进行授权验证,不太明白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值