CGLIB怎么实现代理设计模式

本篇内容主要讲解“CGLIB怎么实现代理设计模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CGLIB怎么实现代理设计模式”吧!

成都创新互联专业为企业提供丹东网站建设、丹东做网站、丹东网站设计、丹东网站制作等企业网站建设、网页设计与制作、丹东企业网站模板建站服务,十载丹东做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

CGLIB实现代理设计模式

从Java的官方来讲,已经明确的要求了如果想要实现代理设计模式,那么一定是基于接口的应用,所以在官方给出的Proxy类创建代理对象时,都需要传递该对象所有的接口信息:

Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);

但是这个时候有一部分开发者就认为不应该强迫性的基于接口实现代理设计,所以一部分开发者就开发出了一个CGLIB开发包,利用这个开发包就可以实现基于类的代理设计模式。
1、CGLIB是一个第三方的程序包,需要单独在Eclipse中进行配置,程序包的路径为:D:jar-libcglib-nodep-3.2.6.jar,那么需要打开Eclipse项目属性安装第三方开发包;
CGLIB怎么实现代理设计模式

2、编写程序类,该类不实现任何接口。

class Message  {public void send() {
        System.out.println("【发送消息】www.mldn.cn");
    }
}

3、利用CGLIB编写代理类,但是这个代理类需要做一个明确,此时相当于使用了类的形式实现了代理设计的处理,所以该代理设计需要通过CGLIB来生成代理对象,定义一个代理类:

class MLDNProxy implements MethodInterceptor{  //拦截器配置private Object target;  //保存真实主题对象public MLDNProxy(Object target){this.target = target;
    }@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        Object returnData = null;if(this.connect()){
            returnData = method.invoke(this.target,args);this.close();
        }return returnData ;
    }public boolean connect(){
        System.out.println("【消息代理】进行消息发送通道的连接。");return true;
    }public void close(){
        System.out.println("【消息代理】关闭消息通道。");
    }
}

4、此时如果想创建代理类对象,则就必须进行一系列的CGLIB处理。

public class JavaAPIDemo {public static void main(String[] args)throws Exception{
        Message realObject = new Message();   //真实主体对象Enhancer enhancer=new Enhancer();  //负责代理操作的程序类enhancer.setSuperclass(realObject.getClass());  //假定一个父类enhancer.setCallback(new MLDNProxy(realObject));  //设置代理类Message proxyObject= (Message) enhancer.create();  //创建代理对象proxyObject.send();
    }
}

在进行代理设计模式定义的时候,除了使用可以接口之外,还可以不受接口限制而实现基于类的代理设计,但从正常的设计角度来讲,强烈建议还是基于接口的设计会比较合理。

到此,相信大家对“CGLIB怎么实现代理设计模式”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前文章:CGLIB怎么实现代理设计模式
链接地址:http://azwzsj.com/article/gegpsg.html