posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          我的AOP學習(AspectJ)

          Posted on 2007-10-15 16:57 G_G 閱讀(1177) 評論(0)  編輯  收藏 所屬分類: AOP
          學習擁有連貫
          在我剛認識 讓 java 動態 這種動態編譯動態加載的幾天后
          對我一向不懂的 AOP 特別是 AspectJ 開竅了 (哈哈 那感覺好啊^_^)
          下面我寫出我剛對AOP的一些小練

          1。目的
          DAO中大量的 session的開和閉 不緊使代碼成倍加,還及容易出錯
          用 設計模式
          hibernate 包裝 下大家好象有點接受不了(@_@!)
          AOP就進入我的視線 但總沒個切入點

          2。原理
          其實 讓 java 動態 就是那點東西 但IBM 包出個好用的框架 來 。

          3。代碼說明
          //*******************Dao.java ****************************
          package
          ?tt;
          //為了簡單 session 看成是 真的session 哈 ^_^
          public?class?Dao?{
          ????
          public?String?session?=?"close"?;?
          ????
          ????
          public?void?testDao(){
          ????????System.out.println(?
          "testDao?in?function?:?"+?session);
          ????}
          ????
          ????
          static?public?void?main(String[]args){
          ????????Dao?dao?
          =?new?Dao()?;
          ????????dao.testDao();
          ????????System.out.println(
          "main?in?function?:?"?+??dao.session);
          ????}
          }

          //*****************List.aj ****************************
          package?tt;

          public?aspect?List?{
          ??? //切點? 范圍聲明? (Dao.testDao 歸 readOnly切點管? )
          ????pointcut?readOnly(Dao?dao):execution(
          *?*Dao.testDao*(..))&&this(dao);

          ????//掛載
          readOnly 開始方法
          ?????before(Dao?dao)?:??readOnly(dao)?{?????????
          ?????????????openSession(dao);
          ??????}
          ???? //掛載 readOnly 結束方法
          ?????after(Dao?dao)?returning()??:??readOnly(dao)?{
          ??????????close(dao);
          ?????}
          ????
          ????
          // readOnly 方法 運行代碼 (到這可以大膽的寫 java 代碼了 ) 。。。。
          ?????private?void?openSession(Dao?dao)?{
          ?????????
          if(dao.session.equals("close"))
          ?????????????dao.session?
          =?"Session?Open";
          ?????}
          ?????
          private?void?close(Dao?dao)?{
          ?????????dao.session?
          =?"close"?;
          ?????}
          }

          4。結果:
          testDao in function : Session Open
          main in function : close



          4。后續
          AspectJ 使 AOP 簡單
          可能還會統一標準
          能為我們的java 框架靈活 更上一層 (期待)


          主站蜘蛛池模板: 团风县| 宁乡县| 稻城县| 综艺| 双城市| 濮阳县| 栾城县| 来宾市| 疏勒县| 铜鼓县| 义马市| 广元市| 柞水县| 阿尔山市| 成都市| 罗定市| 禄劝| 宝清县| 锦州市| 喀喇| 华蓥市| 卢氏县| 龙胜| 涞源县| 陆良县| 罗田县| 沂南县| 临安市| 阿拉善右旗| 安阳市| 西安市| 方城县| 大渡口区| 彰武县| 宜君县| 霸州市| 青浦区| 舞钢市| 深圳市| 成都市| 林芝县|