svnno****@sourc*****
svnno****@sourc*****
2009年 10月 6日 (火) 12:58:07 JST
Revision: 3711 http://sourceforge.jp/projects/jiemamy/svn/view?view=rev&revision=3711 Author: ashigeru Date: 2009-10-06 12:58:07 +0900 (Tue, 06 Oct 2009) Log Message: ----------- サンプルの説明を多少強化 Modified Paths: -------------- leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_09dao/DaoInitializer.java leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/Main.java leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/ProxyDriver.java Modified: leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_09dao/DaoInitializer.java =================================================================== --- leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_09dao/DaoInitializer.java 2009-10-06 01:14:18 UTC (rev 3710) +++ leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_09dao/DaoInitializer.java 2009-10-06 03:58:07 UTC (rev 3711) @@ -18,6 +18,7 @@ import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; +import java.util.Arrays; import java.util.Properties; import org.jiemamy.utils.enhancer.Invocation; @@ -33,7 +34,7 @@ public Object handle(Invocation invocation) throws Throwable { System.out.printf("%s の呼び出しをフック%n", invocation); - // とりあえずインスタンスを生成するところまで + System.out.println("とりあえずインスタンスを生成"); Object result; try { result = invocation.proceed(); @@ -43,13 +44,16 @@ } // なぜかインスタンスがProperties - assert result instanceof Properties; + System.out.printf("%sの親クラスは%s%n", + result.getClass().getName(), + result.getClass().getSuperclass().getName()); // そして引数にはURLが来てる + System.out.printf("そして引数には%sが来る%n", Arrays.toString(invocation.getArguments())); URL url = (URL) invocation.getArguments()[0]; - System.out.printf("url=%s%n", url); // ロードしておく + System.out.printf("プロパティを%sの内容で初期化%n", url); InputStream in = url.openStream(); try { ((Properties) result).load(in); @@ -58,7 +62,7 @@ in.close(); } - System.out.printf("properties=%s%n", result); + System.out.printf("初期化が終わったインスタンスの内容は%s%n", result.toString()); // 最後にnewした結果として返す return result; Modified: leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/Main.java =================================================================== --- leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/Main.java 2009-10-06 01:14:18 UTC (rev 3710) +++ leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/Main.java 2009-10-06 03:58:07 UTC (rev 3711) @@ -16,8 +16,8 @@ package org.jiemamy.util.enhancer.example._10proxy; import java.lang.reflect.Method; +import java.lang.reflect.Proxy; import java.util.Arrays; -import java.util.Properties; import java.util.concurrent.Callable; import org.jiemamy.utils.enhancer.Enhance; @@ -39,19 +39,21 @@ public static void main(String...args) throws Exception { Enhancer<ExecutableFactory> enhancer = new InterfaceEnhancer<ExecutableFactory>( ExecutableFactory.class, - Properties.class, // Propertiesを実装するようにする + Object.class, // 今回はnew時にproceed()を呼ばないので親クラスは関係ない Arrays.asList(new Enhance[] { - // Runnableのインスタンス生成の代わりに、Proxyを返す - ProxyDriver.newEnhane(Runnable.class, new java.lang.reflect.InvocationHandler() { + // Runnableのインスタンス生成の代わりに、下記のハンドラが登録されたProxyを返す + ProxyDriver.newEnhance(Runnable.class, new java.lang.reflect.InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] a) { - System.out.printf("Hook %s%n", method); + System.out.printf("Runnableのメソッドが呼ばれた(%s)%n", method); + System.out.println("ここでは特に何もしない"); return null; } }), - // Callableのインスタンス生成の代わりに、Proxyを返す - ProxyDriver.newEnhane(Callable.class, new java.lang.reflect.InvocationHandler() { + // Callableのインスタンス生成の代わりに、下記のハンドラが登録されたProxyを返す + ProxyDriver.newEnhance(Callable.class, new java.lang.reflect.InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] a) { - System.out.printf("Hook %s%n", method); + System.out.printf("Callableのメソッドが呼ばれた(%s)%n", method); + System.out.println("ので、\"Hello\"を返しておく"); return "Hello"; } }), @@ -64,6 +66,10 @@ Runnable runnable = factory.newRunnable(); Callable<String> callable = factory.newCallable(); + System.out.println("プロダクトはいずれもProxyになってるはず"); + System.out.printf("runnable is proxy = %s%n", Proxy.isProxyClass(runnable.getClass())); + System.out.printf("callable is proxy = %s%n", Proxy.isProxyClass(callable.getClass())); + System.out.println("run()メソッドの呼び出し"); runnable.run(); Modified: leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/ProxyDriver.java =================================================================== --- leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/ProxyDriver.java 2009-10-06 01:14:18 UTC (rev 3710) +++ leto/factory-enhancer-example/branches/interface-enhancer/src/main/java/org/jiemamy/util/enhancer/example/_10proxy/ProxyDriver.java 2009-10-06 03:58:07 UTC (rev 3711) @@ -40,11 +40,13 @@ * Proxyを返すためのエンハンスを作成する。 * @param anInterface Proxyを作成する対象のインターフェース * @param handler 指定のインターフェースに対するメソッド呼び出しをハンドルするハンドラ + * これはfactory-enhancerの{@link InvocationHandler}ではなく、 + * 標準の{@link java.lang.reflect.InvocationHandler}である * @return 指定のインターフェースのメソッドを指定のハンドラでフックするProxyを生成するエンハンス - * @throws IllegalArgumentException 引数{@code anInterface}がプロクシを作成できないクラスである場合 + * @throws IllegalArgumentException 引数{@code anInterface}がProxyを作成できない型である場合 * @throws NullPointerException 引数に{@code null}が指定された場合 */ - public static Enhance newEnhane(Class<?> anInterface, java.lang.reflect.InvocationHandler handler) { + public static Enhance newEnhance(Class<?> anInterface, java.lang.reflect.InvocationHandler handler) { if (anInterface == null) { throw new NullPointerException("anInterface is null"); //$NON-NLS-1$ } @@ -125,8 +127,8 @@ /** * インスタンスを生成する。 - * @param proxyCreator - * @param handler + * @param proxyCreator 該当Proxyのインスタンスを生成するコンストラクタ + * @param handler 該当Proxyの各メソッド呼び出しに対するハンドラ * @throws NullPointerException 引数に{@code null}が指定された場合 */ public ProxyHandler(