设计模式 动态代理 cglib(笔记)

本文详细介绍了Java中CGLIB库的工作原理和使用,包括CGLIB生成的代理类结构,以及如何通过CGLIB实现方法拦截,增强原有功能。

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

public class Station {
    public void sellTicket(){
        System.out.println("已经卖出");
    }
}
public class ProxyFactory implements MethodInterceptor {
    private Station station = new Station();
    public Station getStation(){
        //创建enhancer对象,类似于Proxy
        Enhancer enhancer = new Enhancer();
        //传入要被动态代理的类
        enhancer.setSuperclass(Station.class);
        //设置回调函数,传入对象要实现 MethodInterceptor
        enhancer.setCallback(this);
        //创建匿名内部类继承setSuperClass()传入的类
        Station station1 =(Station) enhancer.create();
        return station1;
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("已经收取手续费");
        Object result = method.invoke(station, objects);
        System.out.println("打印结果");
        return result;
    }
}
public class Client {
    public static void main(String[] args) {
        //创建代理工厂
        ProxyFactory proxyFactory = new ProxyFactory();
        //获取继承Station的匿名内部类
        Station station = proxyFactory.getStation();
        //调用sellTicket()
        station.sellTicket();
        //获得匿名匿名内部类的class文件名
        System.out.println(station.getClass());
        while (true){

        }
    }
}

public class Station$$EnhancerByCGLIB$$6977634a
extends Station
implements Factory {
    private boolean CGLIB$BOUND;
    private static final ThreadLocal CGLIB$THREAD_CALLBACKS;
    private static final Callback[] CGLIB$STATIC_CALLBACKS;
    private MethodInterceptor CGLIB$CALLBACK_0;
    private static final Method CGLIB$sellTicket$0$Method;
    private static final MethodProxy CGLIB$sellTicket$0$Proxy;
    private static final Object[] CGLIB$emptyArgs;
    private static final Method CGLIB$finalize$1$Method;
    private static final MethodProxy CGLIB$finalize$1$Proxy;
    private static final Method CGLIB$equals$2$Method;
    private static final MethodProxy CGLIB$equals$2$Proxy;
    private static final Method CGLIB$toString$3$Method;
    private static final MethodProxy CGLIB$toString$3$Proxy;
    private static final Method CGLIB$hashCode$4$Method;
    private static final MethodProxy CGLIB$hashCode$4$Proxy;
    private static final Method CGLIB$clone$5$Method;
    private static final MethodProxy CGLIB$clone$5$Proxy;

    public Station$$EnhancerByCGLIB$$6977634a() {
        Station$$EnhancerByCGLIB$$6977634a station$$EnhancerByCGLIB$$6977634a = this;
        Station$$EnhancerByCGLIB$$6977634a.CGLIB$BIND_CALLBACKS(station$$EnhancerByCGLIB$$6977634a);
    }

    static {
        Station$$EnhancerByCGLIB$$6977634a.CGLIB$STATICHOOK1();
    }

    protected final void finalize() throws Throwable {
        MethodInterceptor methodInterceptor = this.CGLIB$CALLBACK_0;
        if (methodInterceptor == null) {
            Station$$EnhancerByCGLIB$$6977634a.CGLIB$BIND_CALLBACKS(this);
            methodInterceptor = this.CGLIB$CALLBACK_0;
        }
        if (methodInterceptor != null) {
            Object object = methodInterceptor.intercept(this, CGLIB$finalize$1$Method, CGLIB$emptyArgs, CGLIB$finalize$1$Proxy);
            return;
        }
        super.finalize();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值