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 来直接写,然后呢创建代理对象直接用传参的方法【即 把 测试类封装】。 

 

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

posted @ 2021-07-19 23:33  咸瑜  阅读(97)  评论(0编辑  收藏  举报