代理模式--CGLIB动态代理(内含详细实现步骤及代码)

来源:互联网 发布:专科 知乎 编辑:程序博客网 时间:2024/05/20 18:54

实现步骤:

1.创建被代理的类及方法。

public class Train {    public void move() {        System.out.println("火车行驶中");    }}

2.创建一个实现接口MethodInterceptor的类,重写intercept方法,创建获取被代理类的方法 getProxy(Class cla);

import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CglibProxy implements MethodInterceptor {    private Enhancer enhancer = new Enhancer();    // 创建获取被代理类的方法    public Object getProxy(Class cla) {        // 设置创建子类的类(为那个类产生代理类)        enhancer.setSuperclass(cla);        enhancer.setCallback(this);        // 创建并返回类的实例        return enhancer.create();    }    /*拦截所有目标类方法的调用 obj 目标方法的实例对象 m 目标方法的反射对象 args 方法的参数 proxy 代理类的实例    @Override    public Object intercept(Object obj, Method m, Object[] args,            MethodProxy proxy) throws Throwable {        System.out.println("日志开始...");        // 代理类调用父类的方法        proxy.invokeSuper(obj, args);        System.out.println("日志结束...");        return null;    }}

3.获取代理类,通过代理调用方法

public class Test {    public static void main(String[] args) {        CglibProxy proxy = new CglibProxy();        //返回代理类的对象        Train t  =  (Train)proxy.getProxy(Train.class);        t.move();    }}

控制台输出:
日志开始…
火车行驶中
日志结束…

原创粉丝点击