[[JAVAの記事一覧]] &topicpath; *趣旨 [#x0113801] jparsecみてたら、動的ソースコード生成のライブラリ使っており興味が湧いたのでまとめてみる SpringやらHibernateなんかに内部的に使われているライブラリーらしい。 *目次 [#bca26b28] #contents **CGLIBにさわる [#k59f343f] http://muimi.com/j/aop/cglib/ メソッド実行の前後に処理をフックをかけるというか差し込む技がつかわれています。 ***掲載されていたサンプル [#h5c59501] Foo.java package hoge; public class Foo { public void doSomething(){ System.out.println("doSomethig"); } } Sample1.java package hoge; 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 Sample1 { public static void main(String[] args) throws Exception{ Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(Foo.class); enhancer.setCallback(new MyMethodIntercepter()); Foo foo = (Foo)enhancer.create(); foo.doSomething(); } } class MyMethodIntercepter implements MethodInterceptor{ public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("before"); return proxy.invokeSuper(obj, args); } } 実行結果 before doSomethig Enhancerというクラスを利用してサブクラスを作り、setCallback()で差込みを行うようです。