zoukankan      html  css  js  c++  java
  • Spring框架之CGLIB的代理技术(代码了解)

    1。引入CBLIB的开发包

        * 如果想使用CGLIB的技术来生成代理对象,那么需要引入CGLIB的开发的jar包,在Spring框架核心包中已经引入了CGLIB的开发包了。所以直接引入Spring核心开发包即可!

    2..创建BookDaoImpl类:

    package com.huida.demo2;
    
    public class BookDaoImpl {
    
        public void save(){
            System.out.println("保存图书...");
        }
        public void update(){
            System.out.println("更新图书...");
        }
    }

    3.创建代理工具类:

    package com.huida.demo2;
    
    import java.lang.reflect.Method;
    
    import org.springframework.cglib.proxy.Enhancer;
    import org.springframework.cglib.proxy.MethodInterceptor;
    import org.springframework.cglib.proxy.MethodProxy;
    
    public class MycglibUtils {
    
        public static BookDaoImpl getProxy(){
            
            //创建CGLIB核心的类
            Enhancer enhancer=new Enhancer();
            //设置父类
            enhancer.setSuperclass(BookDaoImpl.class);
            //设置回调函数
            enhancer.setCallback(new MethodInterceptor() {
                
                @Override
                public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                    if("save".equals(method.getName()))
                    {
                        //记录日志
                        System.out.println("记录日志...");
                    }
                    return methodProxy.invokeSuper(obj, args);
                }
            });
            //生成代理对象
            BookDaoImpl proxy=(BookDaoImpl)enhancer.create();
            return proxy;
        }
    }

    4.编写测试代码:

    package com.huida.demo2;
    
    import org.junit.Test;
    
    public class demo2 {
    
        @Test
        public void run(){
            BookDaoImpl bookDaoImpl=new BookDaoImpl();
            bookDaoImpl.save();
            bookDaoImpl.update();
            System.out.println("----------------------");
            //使用工具类获取代理对象
            BookDaoImpl proxy=MycglibUtils.getProxy();
            proxy.save();
            proxy.update();
        }
    }

    5.单元测试run()方法,执行结果为:

    记录日志为通过回调函数增加的功能。

  • 相关阅读:
    “是懒人造就了方法”——读后感
    多态性动手动脑
    数组问题随笔
    String java问题随笔
    java问题总结
    java问题随笔
    java一些问题的解答
    利用参数的值得返回来求和
    是懒人造就了方法——读后感
    大道至简读后感——JAVA伪代码
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10131180.html
Copyright © 2011-2022 走看看