CGLIB实现动态代理

    xiaoxiao2022-07-07  194

    动态代理实现完成了,但是所有的代理设计模式都会存在⼀个问题:离不开接⼝。如果现在有新的需求:实现没有接⼝的动态代理模式。

    此时如果要想实现这样的要求,就必须依靠另外的第三⽅组件包: CGLIB (https://github.com/cglib/cglib)。这个开发包才能帮⽤户实现这类的要求。

    1.首先给IDEAL导入CGLIB第三方组建包

    2.写程序是导入四个包

    import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method;

    3.真实业务类 

    class Message{ public void send(){ System.out.println ("www.bit.java.reflact" ); } }

    4.定义一个拦截器

    class ClassProxy implements MethodInterceptor { private Object target; //真实主题对象 public ClassProxy(Object target){ this.target=target; } public void prehandle(){ System.out.println ("处理业务前" ); } public void afterhandle(){ System.out.println ("处理业务后" ); } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { this.prehandle (); Object ret=method.invoke (this.target,objects); this.afterhandle (); return ret; } }

     5.测试类

    public class CGLIBTest { public static void main(String[] args) { Message message=new Message (); //负责代理关系的代理处理类 Enhancer enhancer=new Enhancer(); enhancer.setSuperclass ( message.getClass () ); //代理对象,以上就动态配置好类与类之间的关系的代理关系 enhancer.setCallback ( new ClassProxy ( message ) ); Message temp= (Message) enhancer.create (); temp.send (); }

    6.测试结果

     

     

     

     

     

     

     

     

    最新回复(0)