总结:Java动态代理

一、什么是代理模式?

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。

二、为什么使用代理模式?

最最最主要的原因就是,在不改变目标对象方法的情况下对方法进行增强,比如,我们希望对方法的调用增加日志记录,或者对方法的调用进行拦截,等等...

三、静态代理与动态代理的区别

从功能的角度来讲,没有区别。他们的区别主要是体现在代码重用上,动态代理不会产生很多的静态代理类。静态代理需要为每一个目标对象都创建一个代理类。

四、静态代理

public class ManProxy implements IPerson{

    private IPerson target;

    public IPerson getTarget() {
        return target;
    }

    public ManProxy setTarget(IPerson target) {
        this.target = target;
        return this;
    }

    @Override
    public void say() {
        if (target != null) {
            L.d("man say invoked at : " + System.currentTimeMillis());
            target.say();
        }
    }
}

这样我们需要新建一个ManProxy类同样实现IPerson接口,将要代理的对象传递进来,这样就可以在不修改Man的say方法的情况下实现了我们的需求。这其实就是静态代理。那你可能要问,既然有了静态代理,为什么需要动态代理呢,因为静态代理有一个最大的缺陷:接口与代理类是一对一的,有多个接口需要代理,就需要新建多个代理类,繁琐,类爆炸

五、动态代理

常用的代理对象方法:JDK动态代理,CGLIB


1、JDK动态代理

JDK动态代理是通过JDK提供的 InvocationHandler接口以及Proxy.newProxyInstance 方法实现的。

2、cglib

是针对类来实现代理的,原理是对指定的业务类生成一个子类,并覆盖其中业务方法实现代理。

参考:

Java 静态代理和动态代理例子

JDK动态代理与CGLIB动态代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值