• CGLib代理


    何为CGLib ,百度百科给出了解释如下:

    Spring框架,如果类实现了接口,就使用JDK的动态代理生成代理对象,如果这个类没有实现任何接口,使用CGLIB生成代理对象.JDk强制要求必须有接口来实现动态代理,然而CGLib代理不需要必须有接口才能实现代理,而是通过一种类似“继承”的关系来实现代理的。

    JDK动态代理小案例博客地址: http://www.cnblogs.com/zhanghaoliang/p/6475636.html

    ProductDao被代理的类,CGLibproxy代理类,CGLibTest测试类

    想要使用CGLib要先下载CGLib的jar包,但是Spring核心包(core包)已经集成了CGLib,Spring开发下不用导入专门的CGLib的包。

    ProductDao要被代理的类

    public class ProductDao {
    
        public void add() {
    
            System.out.println("添加商品");
        }
    
        public void update() {
    
            System.out.println("修改商品");
        }
    }


    CGLibproxy

    public class CGLibproxy implements MethodInterceptor {
    
        private ProductDao productDao;
    
        public CGLibproxy(ProductDao productDao) {
    
            super();
            this.productDao = productDao;
        }
    
        // 使用CGLib生成代理
        public ProductDao createProxy() {
    
            // 1.创建核心类
            Enhancer enhancer = new Enhancer();
            // 2.为其设置父类
            enhancer.setSuperclass(productDao.getClass());
            // 3.设置回调
            enhancer.setCallback(this);
            // 4.创建代理
            return (ProductDao) enhancer.create();
        }
    
        @Override
        public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
    
            if ("add".equals(method.getName())) {
                System.out.println("添加之前的操作。。。。。。");
                Object object = methodProxy.invokeSuper(proxy, args);
                return object;
            }
    
            return methodProxy.invokeSuper(proxy, args);
        }
    
    }


    CGlibTest 测试类

    public class CGlibTest {
    
        @Test
        public void testDemo() {
    
            ProductDao productDao = new ProductDao();
            ProductDao proxy = new CGLibproxy(productDao).createProxy();
            proxy.add();
            proxy.update();
        }
    }

    得出结果:


  • 相关阅读:
    Linux 重启命令
    Linux TCP连接数修改
    Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
    keepalived配置文件
    keepalived 安装配置
    linux下keepalived 安装配置
    redis主从切换的集群管理
    CentOS_5.6下使用cmake编译MySQL_5.5.11
    cas错误:org.jasig.cas.client.validation.TicketValidationException: No principal was found in the response from the CAS server.
    完美实现在同一个页面中使用不同样式的artDialog样式
  • 原文地址:https://www.cnblogs.com/zhanghaoliang/p/6475877.html
Copyright © 2020-2023  润新知