[Java] 实现动态代理

1. 首先,定义一个接口,并实现该接口;

2. 然后,定义一个handler,实现InvocationHandler接口,实现其invoke方法。

    这里技巧是通过构造器传入目标代理对象(Object 类型),赋值给内部目标代理对象,

    在实现invoke方法时,通过method.invoke(内部目标代理对象,args)实现真实调用;

3. 使用代理时,先构造该handler,然后通过Proxy获取代理实例,最终实现方法代理调用。


举例如下:

public interface HelloWorld {
     public void sayHelloWorld();   
}

public class HelloWorldImpl implements HelloWorld{

    @Override
    public void sayHelloWorld() {
        System.out.println("Hello World!");   
    }
    
}

public class HelloWorldHandler implements InvocationHandler{
    
    private Object targetObject;  
    
    public HelloWorldHandler(Object targetObject){   
        this.targetObject = targetObject;   
    }   

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法调用前...");   
  
        Object result = method.invoke(this.targetObject, args);   
  
        System.out.println("方法调用结束...");   
           
        return result;   
    }
    
}

public class HelloWorldTest {
     public static void main(String[] args) {   
        //业务对象  
        HelloWorldImpl obj = new HelloWorldImpl();   
           
        //拦截器对象  
        HelloWorldHandler handler = new HelloWorldHandler(obj);   
           
        //返回业务对象的代理对象  
        HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance(   
                obj.getClass().getClassLoader(),    
                obj.getClass().getInterfaces(),    
                handler);   
           
        //通过代理对象执行业务对象的方法  
        proxy.sayHelloWorld();   
    }   
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值