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

          我的AOP學(xué)習(xí)(AspectJ)

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

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

          2。原理
          其實 讓 java 動態(tài) 就是那點東西 但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 結(jié)束方法
          ?????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。結(jié)果:
          testDao in function : Session Open
          main in function : close



          4。后續(xù)
          AspectJ 使 AOP 簡單
          可能還會統(tǒng)一標(biāo)準(zhǔn)
          能為我們的java 框架靈活 更上一層 (期待)


          主站蜘蛛池模板: 泽州县| 安仁县| 天门市| 虞城县| 文水县| 浦城县| 光泽县| 射阳县| 河北区| 奇台县| 永顺县| 叶城县| 石门县| 芦溪县| 杂多县| 方城县| 二手房| 布拖县| 大石桥市| 绥中县| 平武县| 新巴尔虎右旗| 辉南县| 嘉鱼县| 水富县| 库伦旗| 金山区| 新蔡县| 定安县| 华池县| 河津市| 屯留县| 讷河市| 达拉特旗| 颍上县| 高邮市| 安国市| 湟中县| 南澳县| 塔河县| 堆龙德庆县|