JDK实现动态代理的例子-proxy

public interface Target {

    public void doSomething();

}

 

public class TargetImpl implements Target {

    @Override
    public void doSomething() {
        
        System.out.println("doSomething 方法开始执行----");
        
    }

}

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationhandler implements InvocationHandler {

    private Target target;
    
    public MyInvocationhandler(Target target){
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
        System.out.println("开始处理-----");
        
        Object result = method.invoke(target, args);
        
        System.out.println("处理完成-----");
        
        return result;
    }

}

 

 

 

 

    public static void main(String[] args) {

        Target target = (Target) Proxy.newProxyInstance(TargetImpl.class.getClassLoader(),
            TargetImpl.class.getInterfaces(), new MyInvocationhandler(new TargetImpl()));
        
        target.doSomething();

    }

 

 

输出结果:

 

开始处理-----
doSomething 方法开始执行----
处理完成-----

 

 

动态代理的原理:
动态代理和普通的代理模式的区别,就是动态代理中的代理类是由java.lang.reflect.Proxy类在运行期时根据接口定义,采用Java反射功能动态生成的。和java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。如图2,图中的自定义Handler实现InvocationHandler接口,自定义Handler实例化时,将实现类传入自定义Handler对象。自定义Handler需要实现invoke方法,该方法可以使用Java反射调用实现类的实现的方法,同时当然可以实现其他功能,例如在调用实现类方法前后加入Log。而Proxy类根据Handler和需要代理的接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际上是调用了自定义Handler的invoke方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值