Kela's Blog

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

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

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

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

          ?

          在一個服務的流程中插入與業務邏輯無關的系統服務邏輯(比如 Logging、Security),這樣的邏輯稱為Cross-cutting concerns,將Cross-cutting concerns獨立出來設計為一個對象,這樣的特殊對象稱之為Aspect,Aspect-oriented programming著重在Aspect的設計及與應用程序的織入(Weave)。

          ?

          ???? 靜態代理

          ?

          在靜態代理的實現中,代理對象與被代理對象都必須實現同一個接口,在代理對象中可以實現日志記錄等相關服務,并在需要的時候再呼叫被代理的對象,如此代理對象當中就可以僅保留業務相關職責。

          ???? IHello.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);

          ??? }

          }

          ???? HelloProxy.java

          ?

          package com.kela.spring.aop;

          ?

          import org.apache.log4j.Logger;

          ?

          public class HelloProxy implements IHello {

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

          ???

          ??? private IHello helloObject;

          ???

          ??? public HelloProxy(IHello helloObject) {

          ??????? this.helloObject = helloObject;

          ??? }

          ???

          ??? public void hello(String name) {

          ??????? // 日志記錄

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

          ??????? // 執行業務邏輯

          ??????? helloObject.hello(name);

          ??????? // 日志記錄

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

          ??? }

          }

          ???? ProxyDemo.java

          ?

          package com.kela.spring.aop;

          ?

          public class ProxyDemo {

          ?

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

          ??????? HelloProxy proxy = new HelloProxy(new HelloSpeaker());

          ???????

          ??????? proxy.hello("KELA");

          ??? }

          }

          ???? 運行結果

          ?

          HelloProxy - hello 方法開始執行 ... ...

          ? 你好, KELA

          HelloProxy - hello 方法執行完畢

          ?

          ???? 學習小結

          ?

          靜態代理中,代理對象的一個接口只服務于一種類型的對象,而且如果要代理的方法很多,勢必要為每個方法進行代理,靜態代理在程序規模稍大時就無法勝任。

          分享到:
          主站蜘蛛池模板: 兴文县| 溧水县| 章丘市| 德惠市| 渝北区| 苍南县| 增城市| 晋州市| 新昌县| 金溪县| 普宁市| 望谟县| 永善县| 石棉县| 广东省| 建阳市| 靖宇县| 阿克陶县| 石家庄市| 抚宁县| 玛沁县| 河池市| 老河口市| 东海县| 白朗县| 来凤县| 顺昌县| 眉山市| 保定市| 舞钢市| 延安市| 辉南县| 济源市| 农安县| 云梦县| 龙门县| 都匀市| 色达县| 水城县| 鲁甸县| 巴青县|