Java动态代理三种实现模式

        代理模式是指客户端通过代理对象访问实际对象的设计模式。通常我们在处理同一种类型的服务,这个服务的大部分都是相同的,只是在具体的细节上存在差异。这种情况为了避免重复处理相同的服务部分,我们就可以将具体实现细节抽象出来,通过代理实现,在整体结构上种类繁多的服务看起来如同只有一个服务,区别只是在于服务具体的细节不一样。

Java提供三种方式实现动态代理:JDK代理,CGLIB和通过编译期提供的API动态创建代理类。
1.JDK代理通过实现InvocationHandler被代理对象必须实现接口
2.CGLIB代理类实际是被代理类的一个子类,被代理对象必须可以被继承(不能有final之类的声明)
3.通过编译期提供的API动态创建代理类,需要定义被代理对象

这里贴一个个JDK代理实现的简单示例供参考:
1.被代理接口

public interface BusinessProcesser {
    /**
     * 功能描述:消息执行
     * @param message
     * @return
     */
     public void  execute();
}

2.被代理实现

public class HttpGetProcesser implements BusinessProcesser{

    @Override
    public void execute() {
        System.out.println("this is HttpGetProcesser");
    }

}


3.代理实现

public class ProcesserProxy implements InvocationHandler {

    Object obj;
    public Object getProxy(Object obj)
    {
        this.obj = obj;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
        .getClass().getInterfaces(), this);
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable
    {
        doBefore();
        Object res = method.invoke(obj, args);
        doAfter();
        return res;
    }
    private void doBefore() {
        System.out.println("[Proxy]一些前置处理");
    }
    private void doAfter() {
        System.out.println("[Proxy]一些后置处理");
    }
}


4.调用方式

public class ProcesserTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        BusinessProcesser bp = new HttpGetProcesser();
        ProcesserProxy invocationProxy  = new ProcesserProxy();
        BusinessProcesser proxyProcesser  = (BusinessProcesser) invocationProxy.getProxy(bp);
        proxyProcesser.execute();
    }

}


实战代码较多,后续补上。

的java代码字符串。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值