<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑人野居
    好好學習,天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ?? 默認的情況下,Aspect類只有一個實例存在于虛擬機中,也就是作為單例存在的,對于每個對象來說,方面是共享的。一般這樣的方面,不能用來保存相應對象的狀態(tài)。
    ?? 對于AspectJ 來說,Aspect方面類,包括以下的實例化方式。
    • 每虛擬機(默認),只有一個實例,其生命周期從虛擬機啟動開始,一直到虛擬機停止。
    • 每對象,對于每一個對象都有一個方面實例,其生命周期跟隨相關聯(lián)的對象。
    • 每控制流,對于每個controlFlow點,都會創(chuàng)建相應的方面實例,可以參考事務管理(對于事務,每個原子操作,都是一個控制流,方面的生命周期,從控制流開始,一直到控制流結束)。

    1)?? 每虛擬機關聯(lián)

    默認方面,它的狀態(tài)是共享的。

    2)每對象關聯(lián)

    通常,重用基礎方面需要保持每個對象的狀態(tài),也就是對象的數據。對于每個對象都會創(chuàng)建一個方面實例。

    對于每對象關聯(lián)可以指定兩種類型:

    perthis()-與當前所匹配的連接點的執(zhí)行對象,所關聯(lián)

    pertarget()—與當前所匹配的連接點的目標執(zhí)行對象,所關聯(lián)

    3)控制流關聯(lián)

    可以指定兩種類型的每控制流對象關聯(lián):

    percflow()--對于在percflow()指定的pointcut所匹配的連接點,關聯(lián)每一個獨立的方面實例和控制流執(zhí)行。

    percflowbelow(),對于在prcflowbelow ()指定的pointcut所匹配的連接點,關聯(lián)每一個獨立的方面實例和控制流下的執(zhí)行。


    下面來看一個實例:來區(qū)別不同點:

    聲明必要的測試類



    public class TestBean {

    ??? private String name;

    ??? public TestBean(String name) {
    ??????? this.name = name;
    ??? }

    ??? public void method1() {
    ??? }

    ??? public void method2() {
    ??? }

    ??? @Override
    ??? public String toString() {
    ??????? return name;
    ??? }

    }

    測試類:

    public class LogAspectTest {

    ??? @Test
    ??? public void testAssociation() {
    ??????? TestBean bean1 = new TestBean("bean1");
    ??????? TestBean bean2 = new TestBean("bean2");
    ??????? bean1.method1();
    ??????? bean1.method2();
    ??????? bean2.method1();
    ??????? bean2.method2();
    ??? }
    }


    方面類:
    public aspect LogAspect {

    ??? private static Log log = LogFactory.getLog(LogAspect.class);

    ??? public LogAspect() {
    ??????? log.info("create LogAspect instance");
    ??? }

    ??? pointcut logMethod(TestBean bean)
    ??????? :execution(* TestBean.method*(..))&&this(bean)&&!within(LogAspect+);

    ??? before(TestBean bean):logMethod( bean){
    ??????? log.info("JoinPoint: "
    ???????????????? + thisJoinPointStaticPart
    ???????????????? + "\n\taspect: "
    ???????????????? + this
    ???????????????? + "\n\tobject: "
    ???????????????? + bean);

    ??? }
    }

    默認的輸出為:
    2006-10-21 20:42:02,275 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:42:02,275 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@15601ea
    ??? object: bean1
    2006-10-21 20:42:02,275 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@15601ea
    ??? object: bean1
    2006-10-21 20:42:02,275 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@15601ea
    ??? object: bean2
    2006-10-21 20:42:02,275 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@15601ea
    ??? object: bean2

    可以看到只是實例化了一次


    現(xiàn)在更改相應的aspect,

    public aspect LogAspect perthis(logMethod(TestBean)){

    ??? ....

    ??? }
    }

    只是增加了perthis(logMethod(TestBean))

    輸出時,可以看到創(chuàng)建了兩個實例

    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@197d257
    ??? object: bean1
    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@197d257
    ??? object: bean1
    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@7259da
    ??? object: bean2
    2006-10-21 20:45:21,306 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@7259da
    ??? object: bean2

    繼續(xù)更改aspect,把perthis改為percflow

    輸出改為:

    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@eee36c
    ??? object: bean1
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@194df86
    ??? object: bean1
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method1())
    ??? aspect: demo.chap4.log.LogAspect@defa1a
    ??? object: bean2
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - create LogAspect instance
    2006-10-21 20:46:58,009 [demo.chap4.log.LogAspect] - JoinPoint: execution(void demo.chap4.log.TestBean.method2())
    ??? aspect: demo.chap4.log.LogAspect@f5da06
    ??? object: bean2


    每個方法都創(chuàng)建相應的實例。


    posted on 2006-10-21 20:50 布衣郎 閱讀(1982) 評論(0)  編輯  收藏 所屬分類: aop

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357268
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲伊人成无码综合网| 妇女自拍偷自拍亚洲精品| 久久久久亚洲AV成人网人人网站| aⅴ在线免费观看| 99久久精品毛片免费播放| 亚洲av无码成人影院一区| 亚洲国产精品人久久电影| 亚洲AV综合色一区二区三区| 亚洲AV无码一区二区三区在线观看 | 2020年亚洲天天爽天天噜| 亚洲av无码国产精品色午夜字幕 | 一二三四在线观看免费中文在线观看| 日韩亚洲国产综合高清| 久久亚洲精品国产精品| 亚洲动漫精品无码av天堂| 国产精品亚洲αv天堂无码| 免费看国产曰批40分钟| 啦啦啦手机完整免费高清观看| 精品免费人成视频app| 95老司机免费福利| 四虎影视在线影院在线观看免费视频| 香蕉免费在线视频| 一区视频免费观看| 日本在线观看免费高清| 国产精品亚洲精品日韩动图 | 国产禁女女网站免费看| 免费无码A片一区二三区 | 亚洲AV综合永久无码精品天堂| 中文有码亚洲制服av片| 亚洲综合成人婷婷五月网址| 亚洲娇小性xxxx色| 亚洲日韩精品无码专区加勒比☆ | 日本免费v片一二三区| 国产精品免费电影| 国产三级免费观看| 亚洲国模精品一区| 亚洲精品无码高潮喷水在线| 久久国产亚洲电影天堂| 91亚洲一区二区在线观看不卡| 97se亚洲综合在线| 精品亚洲AV无码一区二区|