轉(zhuǎn)載請(qǐng)標(biāo)明出處http://www.cnblogs.com/yxx123/p/6665736.html
參考:深入理解Android之AOP
AOP雖然是方法論,但就好像OOP中的Java一樣,一些先行者也開發(fā)了一套語言來支持AOP。目前用得比較火的就是AspectJ了,它是一種幾乎和Java完全一樣的語言,而且完全兼容Java(AspectJ應(yīng)該就是一種擴(kuò)展Java,但它不是像Groovy[1]那樣的拓展。)。當(dāng)然,除了使用AspectJ特殊的語言外,AspectJ還支持原生的Java,只要加上對(duì)應(yīng)的AspectJ注解就好。所以,使用AspectJ有兩種方法:
完全使用AspectJ的語言。這語言一點(diǎn)也不難,和Java幾乎一樣,也能在AspectJ中調(diào)用Java的任何類庫。AspectJ只是多了一些關(guān)鍵詞罷了。
或者使用純Java語言開發(fā),然后使用AspectJ注解,簡(jiǎn)稱*@AspectJ*。
AspectJ的配置可以參考另一篇文章Android中使用AspectJ
Join Points介紹
Join Points是AspectJ中的一個(gè)關(guān)鍵概念。Join Points可以看作是程序運(yùn)行時(shí)的一個(gè)執(zhí)行點(diǎn),比如:一個(gè)函數(shù)的調(diào)用可以看作是個(gè)Join Points,如Log.e()這個(gè)函數(shù),e()可以看作是個(gè)Join Points,而調(diào)運(yùn)e()的函數(shù)也可以認(rèn)為是一個(gè)Join Points;設(shè)置一個(gè)變量,或者讀取一個(gè)變量也可以是個(gè)Join Points;for循環(huán)也可以看作是Join Points。
理論上說,一個(gè)程序中很多地方都可以被看做是Join Points,但是AspectJ中,只有下面所示的幾種執(zhí)行點(diǎn)被認(rèn)為是Join Points:
Join Points | 說明 | 示例 |
---|---|---|
method call | 函數(shù)調(diào)用 |
延伸閱讀
我想了解如何學(xué)習(xí) |