[Jiemamy-notify:2787] commit [3711] サンプルの説明を多少強化

Back to archive index

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(




Jiemamy-notify メーリングリストの案内
Back to archive index