• 14. Spring — AOP —cglib动态代理


    这个东西其实是第三方的,理论要导jar包 ,但是呢 ,Spring 在后面直接集成了他 ,你可以在源码找到。

    我们现在用这玩意来写动态代理:

    先导入 Spring的gav

    第一步 直接新建一个 增强类:【你爱弄不弄...】

    package com.bihu.cglib;
    
    public class EnhanceMethod {
        public void before(){
            System.out.println("前置增强...");
        }
    
        public void after(){
            System.out.println("后置增强...");
        }
    }

    第二步  新建一个目标类

    package com.bihu.cglib;
    
    import com.bihu.TargetInterface;
    
    public class Target implements TargetInterface {
        @Override
        public void method() {
            System.out.println("method Running·····");
        }
    }

    第三步 直接新建一个测试类【里面写创建代理对象的方法】

    package com.bihu.cglib;
    
    
    import org.springframework.cglib.proxy.Enhancer;
    import org.springframework.cglib.proxy.MethodInterceptor;
    import org.springframework.cglib.proxy.MethodProxy;
    
    import java.lang.reflect.Method;
    
    public class AgentTest {
    
        public static void main(final String[] args) {
            final Target target = new Target();
            final EnhanceMethod enhanceMethod = new EnhanceMethod();
    
            // 1 .创建增强器
            final Enhancer enhancer = new Enhancer();
            // 2 .设置父类(目标)
            enhancer.setSuperclass(Target.class);
            // 3 .设置回调[这里其实你可以实现这个接口 然后传个this进去]
            enhancer.setCallback(new MethodInterceptor() {
                @Override
                public Object intercept(Object o, Method method, Object[] object, MethodProxy methodProxy) throws Throwable {
                    //增强前置
                    enhanceMethod.before();
                    //执行方法
                    Object invoke = method.invoke(target, object);
                    //增强后置
                    enhanceMethod.after();
                    return invoke;
                }
            });
            // 4 .创建代理对象[为什么用Target 我们说过了 它类似于复制 嘿嘿...]
            Target proxy = (Target) enhancer.create();
    
            //5.直接调用即可
            proxy.method();
        }
    }

    其实这个比较容易

    当然写法你可以去降低耦合  就是实现接口 MethodInterceptor 来直接写,然后呢创建代理对象直接用传参的方法【即 把 测试类封装】。 

    其实仔细看一点都不难  主要是那些东西是这样的就是这样的。。。。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15032851.html

  • 相关阅读:
    MD5 Hashing in Java
    Caching in Presto
    ORC 文件存储格式
    Presto 性能优化点
    数据分页问题
    ES
    ES
    ES
    ES
    ES
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15032851.html
Copyright © 2020-2023  润新知