zoukankan      html  css  js  c++  java
  • cglib动态代理举例

    jdk的动态代理是基于接口的代理,而cglib不要求实现接口,是一种基于继承的代理,使用字节码生成被代理类的子类

    public class TestMethodInterceptor implements MethodInterceptor {
    
        private Object targetObject;
    
        public TestMethodInterceptor(Object target){
            this.targetObject = target;
        }
    
        public Object getProxyInstance() {
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(targetObject.getClass());
            enhancer.setCallback(this);
            Object proxy = enhancer.create();
            return proxy;
        }
    
        @Override
        public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            System.out.println("intercept begin");
            System.out.println("class:" + o.getClass().getName() + ", method:"+ method.getName());
            System.out.println("class:" + methodProxy.getClass().getName() + ", method:"+ method.getName());
            methodProxy.invokeSuper(o,objects);
            method.invoke(targetObject,objects);
            System.out.println("intercept end");
            return null;
        }
    
    }
        public static void main(String[] args) {
            SayImpl sayProxy = (SayImpl)new TestMethodInterceptor(new SayImpl()).getProxyInstance();
            sayProxy.sayHello("my dear");
        }

    执行结果:

    intercept begin
    class:com.cainiao.wmpinbound.refund.job.register.node.SayImpl$$EnhancerByCGLIB$$1e0a054, method:sayHello
    class:org.springframework.cglib.proxy.MethodProxy, method:sayHello
    hello:my dear
    hello:my dear
    intercept end

  • 相关阅读:
    BZOJ4346 : [POI2016]Nadajniki
    BZOJ4345 : [POI2016]Korale
    BZOJ4134 : ljw和lzr的hack比赛
    BZOJ4342 : CF348 Pilgrims
    BZOJ2310 : ParkII
    BZOJ3322 : [Scoi2013]摩托车交易
    BZOJ1444 : [Jsoi2009]有趣的游戏
    Xcode8中处理打印日志的配置
    iOS开发之记录用户登录状态
    热修复
  • 原文地址:https://www.cnblogs.com/cishengchongyan/p/8108215.html
Copyright © 2011-2022 走看看