package cn.cglib; import java.lang.reflect.Method; import java.util.logging.Logger; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class TestCglibProxy { public static void main(String[] args) { AProxy ap = new AProxy(); A a = (A)ap.getProxy(A.class); a.method1(); a.method2(); } } /** * 这个A类是我们的目标类 * @ClassName: A * @Description: TODO * @author Administrator * @date May 7, 2011 9:13:59 PM * */ class A{ public void method1(){ System.out.println(" A method1"); } public void method2(){ System.out.println(" A method2"); } } /** * 这个AProxy类是我们针对A类的代理类,它实现了MethodInterceptor这个接口 * 在实现这个接口的同时,public Object intercept()----这个方法必须被重写 * 其中有一个Enhancer这个类,这个类就是用来专门为目标类在运行时动态的生成目标类的子类对象 * @ClassName: AProxy * @Description: TODO * @author Administrator * @date May 7, 2011 9:14:20 PM * */ class AProxy implements MethodInterceptor{ //MethodInterceptor 方法的拦截器 private Logger log = Logger.getLogger("A"); private Enhancer en = new Enhancer();//Enhancer 这个类是cglib很重要的一个类 public Object getProxy(Class c){ en.setCallback(this); en.setSuperclass(c); return en.create();//动态生成c类子类的对象 } //这个方法必须被重写 public Object intercept(Object o, Method m, Object[] os, MethodProxy proxy) throws Throwable { log.info("invoke method: " + m.getName()); Object result = proxy.invokeSuper(o, os);//实际上就是接着调用父类的方法 return result; } }
CGLIB初探
猜你喜欢
转载自michaelegend.iteye.com/blog/1036081
今日推荐
周排行