- 追加された行はこの色です。
- 削除された行はこの色です。
[[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()で差込みを行うようです。