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

          我的AOP學習(AspectJ)

          Posted on 2007-10-15 16:57 G_G 閱讀(1171) 評論(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 框架靈活 更上一層 (期待)


          主站蜘蛛池模板: 安庆市| 多伦县| 铁岭市| 南平市| 措美县| 汾阳市| 洪泽县| 资源县| 邵武市| 内江市| 沅陵县| 浦城县| 任丘市| 綦江县| 仙桃市| 天镇县| 察隅县| 遂溪县| 姜堰市| 沙田区| 盘山县| 武鸣县| 阿拉尔市| 桑植县| 安龙县| 呼图壁县| 双辽市| 丹阳市| 淳安县| 沁阳市| 仁寿县| 亚东县| 高陵县| 叙永县| 安多县| 中牟县| 蓬莱市| 高邑县| 景宁| 揭阳市| 沙洋县|