Loading

cgLib生成动态代理

package com.stono.cglib;

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 enhance = new Enhancer();

    public Object getProxy(Class<?> clazz) {
        // 设置创建子类的类
        enhance.setSuperclass(clazz);
        enhance.setCallback(this);
        return enhance.create();
    }

    /**
     * 拦截所有目标类方法的调用<br>
     * obj 目标类的实例<br>
     * m 目标方法的反射对象 <br>
     * args 方法的参数 <br>
     * proxy 代理类的实例
     */
    @Override
    public Object intercept(Object obj, Method m, Object[] args,
            MethodProxy proxy) throws Throwable {
        System.out.println("before .....");
        // 代理类调用父类的方法
        Object invokeSuper = proxy.invokeSuper(obj, args);
        System.out.println("after ......");
        return invokeSuper;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        CglibProxy proxy = new CglibProxy();
        Train t = (Train) proxy.getProxy(Train.class);
        t.move();
    }

}

/**
 * 被代理的类
 * 
 */
class Train {

    public void move() {
        System.out.println("train is running!");
    }
}

 cglib的jar包在网上找一下,不能找eclipse之类里面的,有security问题;

posted @ 2015-04-05 19:02  stono  阅读(873)  评论(0编辑  收藏  举报