日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java aspectj_初窥AspectJ

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aspectj_初窥AspectJ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AspectJ可以說是Java中當之無愧的黑魔法。說它是黑魔法,一方面是因為它很強大,能夠解決一些傳統編程方法論解決不了的問題,而另一方面,它也相當的晦澀,有著比較陡峭的學習曲線。

本文將帶大家探索下AspectJ是什么,能做什么,以及如何來做,希望通過本文能夠讓大家初窺AspectJ之門道

AOP是什么

相信很多人第一次聽說AOP是在學習spring的時候,筆者也是。這個概念其實困擾了我很久,到底是AOP?AOP是Aspect Oriented Programming的縮寫,和OOP(Object Oriented Programming)一樣,都代表一種編程思想。不同的是,OOP是對世界萬物的抽象,而AOP做的則是對業務處理過程的抽象,一定程度上說,AOP是OOP思想的一種延續,對程序進行了進一步的封裝。

那么AOP到底能夠解決什么問題呢?以在現有系統上增加一個安全策略為例,我們需要在各個模塊的代碼中不同地方添加代碼,進行安全策略的檢查。這種方式實現起來很復雜,容易出錯,而且沒法復用。這里描述的安全問題就是一個橫切關注點問題,開發者需要找到所有需要關注的代碼斷,在現有代碼中間插入新的業務代碼(就好像對現有代碼做了切分)。類似這里安全策略的問題還有很多,比如tracing等。

AspectJ基本概念

AspectJ是AOP的Java實現版本,定義了AOP的語法,可以說是對Java的一個擴展。相對于Java,AspectJ引入了join point(連接點)的概念,同時引入三個新的結構,pointcut(切點), advice(通知),inter-type declaration(跨類型聲明)以及aspect。其中pointcut和advice是AspectJ中動態額部分,用來指定在什么條件下切斷執行,以及采取什么動作來實現切面操作。顧名思義,這里的pointcut就是用來定義什么情況下進行橫切,而advice則是指橫切情況下我們需要做什么操作,所以說pointcut和advice會動態的影響程序的運行流程。從某種角度上說,pointcut(切點)和我們平時用IDE調試程序時打的斷點很類似,當程序執行到我們打的斷點的地方的時候(運行到滿足我們定義的pointcut的語句的時候,也就是join point連接點),我們可以執行一段腳本(執行advice中定義的行為)。

而AspectJ中的inter-type declaration(跨類型聲明)則是AspectJ中靜態的部分,它影響的是程序的靜態結構,比如成員變量,類之間的關系等。Aspect則是對前三個結構的封裝,類似于java中的類。

第一個AspectJ程序

這里我們先不去具體探討AspectJ的語法問題,而重點關注如何用AspectJ寫一個簡單的Demo。這里我用的開發環境是IntelliJ,且項目使用maven來構建。

maven依賴

要運行AspectJ程序,首先要引入AspectJ運行時的依賴:

org.aspectj

aspectjrt

1.8.9

除了運行時依賴,還需要aspectjweaver.jar:

org.aspectj

aspectjweaver

1.8.9

一個簡單的類

先寫一個簡單的類:package?cc.databus.aspect;public?class?Account?{????double?balance?=?200;????public?boolean?withdraw(int?amount)?{????????if?(balance?

}

balance?=?balance?-?amount;????????return?true;

}????@Override

public?String?toString()?{????????return?"Account{"?+????????????????"balance="?+?balance?+????????????????'}';

}

}

該類定義了一個Account類,并提供了withdraw(取款)的方法。

aspect定義

創建一個AccountAspect.aj文件來記錄取款前后的信息://?aspect?package?cc.databus.aspect;public?aspect?AccountAspect?{????//?define?a?pointcut?to?pick?up?invoking?Accont.withdraw

pointcut?callWithDraw(int?amount,?Account?account):????????????call(boolean?Account.withdraw(int))

&&?args(amount)

&&?target(account);????//?advice?definition?executing?before?enterring?method?body

before(int?amount,?Account?acc):?callWithDraw(amount,?acc)?{

System.out.println("Start?withdraw?"?+?amount?+?"?from?"?+?acc);

}

after(int?amount,?Account?acc)?returning?(Object?ret):?callWithDraw(amount,?acc)?{

System.out.print("Finish?withdraw,?return?"

+?ret?+",?account?after?withdraw?is:?"?+??acc);

}

}

通過IntelliJ可以很方便的創建aspect文件,在包上面右鍵->New->Aspect:

正如你所見,上面的AccountAspect.aj定義了AspectJ的pointcut,advice以及aspect。

aspect織如(weaving)

Weaving....很奇怪的詞。。。這里指的是將aspect中定義的advice植入到運行時的過程。這里我們使用一個maven插件來講aspect織如,這個插件是Mojo AspectJ Maven Plugin:

org.codehaus.mojo

aspectj-maven-plugin

1.7

1.8

1.8

1.8

true

true

utf-8

compile

test-compile

OK,下面我們寫一個UT來測試下aspect是否生效了:import?cc.databus.aspect.Account;import?org.junit.Before;import?org.junit.Test;import?static?org.junit.Assert.assertFalse;import?static?org.junit.Assert.assertTrue;public?class?TestAccount?{????private?Account?account;????@Before

public?void?before()?{

account?=?new?Account();

}????@Test

public?void?given20AndMin10_whenWithdraw5_thenSuccess()?{

assertTrue(account.withdraw(5));

}

@Test

public?void?given20AndMin10_whenWithdraw100_thenFail()?{

assertFalse(account.withdraw(100));

}

}

運行測試,如果命令行有如下的輸出,則表示aspect成功織入我們的代碼,并且pointcut成功切入了Account.withdraw的調用:Start?withdraw?5?from?Account{balance=200.0}Finish?withdraw,?return?true,?account?after?withdraw?is:?Account{balance=195.0}

Process?finished?with?exit?code?0

總結

總的來說,AspectJ是一個相當晦澀難懂的技術,但是不得不承認它很強大。本文在從理論出發,先介紹AOP以及AspectJ的基本概念,然后以一個簡單的Demo程序介紹了如何在項目中使用AspectJ。

原文出處:https://www.cnblogs.com/yflog/p/9582421.html

總結

以上是生活随笔為你收集整理的java aspectj_初窥AspectJ的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三级影片在线播放 | 久久视频在线观看免费 | 中文字幕在线免费视频 | 国产尤物在线观看 | 一级片欧美 | 丝袜人妻一区二区三区 | 免费亚洲一区 | 97超级碰碰人妻中文字幕 | 青青草成人免费视频 | 2017天天干| 精品久久久久久久久久久久久久久久 | 网站黄色在线观看 | 6080亚洲精品一区二区 | 亚洲男同视频 | 涩涩屋视频在线观看 | 欧美区一区二区三 | 天天操 夜夜操 | 国产精品国产三级国产专区51区 | 免费的av片| 欧美一级专区 | 一卡二卡三卡四卡在线 | 亚洲一区二区偷拍 | 青青草原国产在线观看 | 亚洲区一区 | 欧美人与动物xxxx | 国语毛片| 日韩中字在线 | 香蕉视频免费在线 | 羞羞羞网站 | 夜夜天天 | 成人在线三级 | 一区二视频 | 午夜久久久久久久 | avtt亚洲| 中文字幕av影院 | 女同二区| 午夜精品偷拍 | 日韩六九视频 | 97人人澡| 国产小视频在线播放 | 亚洲一二三不卡 | 视频1区 | 在线成人小视频 | 欧美视频自拍偷拍 | 韩国美女毛片 | 日韩夜色| 片集网| 国产精品偷乱一区二区三区 | 美女校花脱精光 | 一区二区三区四区视频在线观看 | 日本成人免费 | 成人羞羞国产免费游戏 | 女人的av | 欧美国产日韩一区 | 熟女丝袜一区 | 黄色免费网页 | 成人久久精品 | 亚洲综合色网 | 欧美涩涩视频 | 性欧美bbw| 亚洲自拍偷拍网 | 亚洲av最新在线网址 | 色就是色网站 | 久久久国产精品一区 | 三极片黄色 | 欧美 日韩 国产 在线观看 | 精品人妻av一区二区三区 | 欧美成人xxx | 91www在线观看 | 国内自拍偷拍网 | 无码人妻丰满熟妇奶水区码 | 国产欧美久久久久 | 欧美另类videossexo高潮 | 国产成人av一区二区三区在线观看 | 成人爱爱免费视频 | 中文字幕在线观看国产 | 人成免费 | 欧av在线| 丰满少妇一区二区三区视频 | 丁香激情综合 | 欧美一二区 | 99国产精品久久久久久久 | 天堂在线观看 | 一级黄色免费网站 | 精品国产一区二区三区四区精华 | 国产午夜性春猛交ⅹxxx | 久久伊人草 | 91夫妻视频 | 精品人妻互换一区二区三区 | av天天操| 国产精品一二三四区 | 日韩av不卡在线播放 | 最新av免费在线观看 | 亚洲不卡一区二区三区 | 色婷婷欧美 | 欧美色88| 中文字幕在线观看免费高清 | 日韩欧美一区二区三区四区 | 精品99久久久久成人网站免费 |