java8 静态代理,jdk动态代理

首先说下静态代理,接口 -> 实现-> 代理, 实现与代理有相同的接口。代理执行时会将实现作为参数传入,代理执行的方法其实是实现的方法,并且可以在执行此方法前后添加其它功能。

代码:

/**
 * 静态代理
 * Create on 2018/8/7 by wangyubing
 */
public class Main {

    public static void main(String[] args) {
        TaskProxy taskProxy = new TaskProxy(new WatchTelevisionTask());
        taskProxy.task();
    }
}

interface TaskInterface {
    void task();
}

class TaskProxy implements TaskInterface{

    private TaskInterface taskInterface;

    TaskProxy(TaskInterface taskInterface) {
        this.taskInterface = taskInterface;
    }

    public void task() {
        System.out.println("我先吃点薯条");
        taskInterface.task();
        System.out.println("看完电视去打会球");
    }
}

class WatchTelevisionTask implements TaskInterface {

    public void task() {
        System.out.println("我正在看电视");
    }
}

小结:静态代理有很强的局限性,一个代理只能服务于一个方法,并不是那么好用。

jdk动态代理

  java提供了java.lang.reflect.InvocationHandler接口,以此来实现动态代理,jdk动态代理必须实现接口,否则无法使用。

代码:

public class Main {
    public static void main(String[] args) {
        TaskInterface taskInterface = (TaskInterface) Proxy.newProxyInstance(DoTaskImplement.class.getClassLoader(), DoTaskImplement.class.getInterfaces(), new TaskProxy(new DoTaskImplement()));
        taskInterface.readBook();
        taskInterface.write();
    }
}

class DoTaskImplement implements TaskInterface {

    public void readBook() {
        System.out.println("我在读书");
    }

    public void write() {
        System.out.println("我在写字");
    }
}

interface TaskInterface {

    void readBook();

    void write();

}


class TaskProxy implements InvocationHandler {

    private Object target;

    TaskProxy(Object target) {
        this.target = target;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
        System.out.println("hahahahhahaha");
        Object invoke = method.invoke(target, args);
        System.out.println("hjaahhasdhjahjdkahskd");
        return invoke;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值