• 动态代理(CGLIB实现)


    CGLIB(Code Generation Library)是一个开源项目。可以直接对类进行增强,而不需要像JDK的动态代理,需要增强的类必须实现某接口

    在使用Spring框架时,因为Spring框架中core包中引入了cglib所以如果想通过cglib来实现动态代理,不需要专门的导cglib的jar包。

    创建代理工厂时,必须得实现MethodInterceptor接口,因为通过cglib创建的代理对象在调方法时会默认执行intercept方法,通过该方法增加目标对象方法。

    public class CglibProxyFactory implements MethodInterceptor {

        //通过构造方法,把目标对象传进来
        private Object target;
        public CglibProxyFactory(Object target) {
            this.target = target;
        }
        
        //得到代理对象
        public Object getProxyObject() {
            Enhancer enhancer = new Enhancer();           //实例化cglib代理增强器-
            
            enhancer.setSuperclass(target.getClass());    //设置目标的类:通过目标类对象来生成代理子对象
            
            enhancer.setCallback(this);                   //回调方法        参数:回调的对象
            
            return enhancer.create();                     //  通过增强器得到代理对象
        }
        
        //增强目标对象方法
        @Override
        public Object intercept(
                Object proxy,                           //代理对象
                Method method,                      //目标对象的方法
                Object[] args,                          //需要增强的方法的参数
                MethodProxy proxyMethod     //代理对象的方法继承目标对象的方法(method)
                ) throws Throwable {
            
            System.out.println("前置增强");
            
            //直接调用目标对象的方法(目标方法执行方式1)
            Object value =  method.invoke(target, args);
            
            //调用代理代理对象的父类方法,相当于间接调用目标对象的方法(目标方法执行方式2)
             Object value = proxyMethod.invokeSuper(proxy, args);
            
             System.out.println("后置增强");
            
             return value;
        }

    }

  • 相关阅读:
    积水识别算法需求
    Visual detection and feature recognition of underwater target using a novel modelbased method
    A deep learning techniquebased automatic monitoring method for experimental urban road inundation
    Identification of Urban Road Waterlogging Using Floating Car Data
    android新手学习笔记
    转:Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)
    Jquery getJSON() 序列化类以及集合(转)
    windows下eclipse模拟运行apk
    Android使用AttributeSet自定义控件的方法
    Android 支持多屏幕机制
  • 原文地址:https://www.cnblogs.com/shizhongyang/p/7147548.html
Copyright © 2020-2023  润新知