Kela's Blog

                      前面的路很坎坷,但畢竟是條路.也許走過這一段就會發現,走過去就是夢想中的地方.因此堅持成為此刻唯一能做且必須去做的事情.
          posts - 9, comments - 27, trackbacks - 0, articles - 15

          kela的筆記 應用程序框架 ---- spring(7)

          Posted on 2006-08-29 16:35 Kela 閱讀(175) 評論(0)  編輯  收藏 所屬分類: 我的筆記(Spring)

          摘要:Spring AOP ,從代理機制看AOP,動態代理的范例

          ?

          JDK1.3之后加入了可協助開發動態代理功能的API,你不必為特定對象與方法編寫特定的代理對象,使用動態代理,可以使用一個處理者(Handler)服務于各個對象。

          ?

          ???? LogHandler.java

          ?

          package com.kela.spring.aop;

          ?

          import java.lang.reflect.InvocationHandler;

          import java.lang.reflect.Method;

          import java.lang.reflect.Proxy;

          ?

          import org.apache.log4j.Logger;

          ?

          public class LogHandler implements InvocationHandler {

          ?

          ??? private Logger log = Logger.getLogger(this.getClass().getName());

          ???

          ??? private Object delegate;

          ???

          ??? public Object bind(Object delegate) {

          ??????? this.delegate = delegate;

          ??????? return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);

          ??? }

          ??? public Object invoke(Object arg0, Method method, Object[] args)

          ??????????? throws Throwable {

          ??????? Object result = null;

          ???????

          ??????? try {

          ??????????? log.info("hello 方法開始執行... ...");

          ???????????

          ??????????? result = method.invoke(delegate, args);

          ???????????

          ??????????? log.info("hello 方法執行完畢");

          ??????? } catch (Exception e) {

          ??????????? System.out.println("[ERROR]" + e.getMessage());

          ??????? }

          ??????? return result;

          ??? }

          ?

          }

          ???? IHell.java

          ?

          package com.kela.spring.aop;

          ?

          public interface IHello {

          ??? public void hello(String name);

          }

          ???? HelloSpeaker.java

          ?

          package com.kela.spring.aop;

          ?

          public class HelloSpeaker implements IHello {

          ?

          ??? public void hello(String name) {

          ??????? System.out.println(" 你好," + name);

          ??? }

          }

          ???? ProxyDemo.java

          ?

          package com.kela.spring.aop;

          ?

          public class ProxyDemo {

          ???

          ??? public void method_2() {

          ??????? LogHandler logHandler = new LogHandler();

          ???????

          ??????? IHello helloProxy = (IHello)logHandler.bind(new HelloSpeaker());

          ???????

          ??????? helloProxy.hello("kela");

          ??? }

          ?

          ??? public static void main(String[] args) {

          ??????? ProxyDemo proxyDemo = new ProxyDemo();

          ???????

          ??????? proxyDemo.method_2();

          ??? }

          }

          ???? 學習小結

          ?

          使用代理對象將記錄等于業務邏輯無關的動作或任務提取出來,設計為一個服務對象,如LogHandler和上一小節中的HelloProxy,這樣的對象稱之為切面(Aspect)。

          分享到:
          主站蜘蛛池模板: 彰化县| 永新县| 天门市| 民县| 德江县| 丹棱县| 铅山县| 县级市| 台东市| 芮城县| 凤凰县| 仁布县| 杭锦旗| 林州市| 上饶县| 淅川县| 拜城县| 房山区| 广宗县| 塘沽区| 沙田区| 郴州市| 崇仁县| 调兵山市| 方正县| 宜州市| 新沂市| 新龙县| 武鸣县| 文水县| 西峡县| 图木舒克市| 清水县| 利辛县| 贡觉县| 深水埗区| 进贤县| 井研县| 屯门区| 寻甸| 赤城县|