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()方法,执行结果为:

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

  • 相关阅读:
    angular 写 文字省略显示指令
    REACT 学习之一:普通表单过滤
    怎么能够做到实时的邮件监听-- 求指点
    C++实现Behavioral
    private virtual in c++
    接口污染
    C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
    c++ override 关键字
    virtual function c++
    删完垃圾代码2
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10131180.html
Copyright © 2011-2022 走看看