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

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

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

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

    1)?? 每虛擬機(jī)關(guān)聯(lián)

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

    2)每對(duì)象關(guān)聯(lián)

    通常,重用基礎(chǔ)方面需要保持每個(gè)對(duì)象的狀態(tài),也就是對(duì)象的數(shù)據(jù)。對(duì)于每個(gè)對(duì)象都會(huì)創(chuàng)建一個(gè)方面實(shí)例。

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

    perthis()-與當(dāng)前所匹配的連接點(diǎn)的執(zhí)行對(duì)象,所關(guān)聯(lián)

    pertarget()—與當(dāng)前所匹配的連接點(diǎn)的目標(biāo)執(zhí)行對(duì)象,所關(guān)聯(lián)

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

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

    percflow()--對(duì)于在percflow()指定的pointcut所匹配的連接點(diǎn),關(guān)聯(lián)每一個(gè)獨(dú)立的方面實(shí)例和控制流執(zhí)行。

    percflowbelow(),對(duì)于在prcflowbelow ()指定的pointcut所匹配的連接點(diǎn),關(guān)聯(lián)每一個(gè)獨(dú)立的方面實(shí)例和控制流下的執(zhí)行。


    下面來(lái)看一個(gè)實(shí)例:來(lái)區(qū)別不同點(diǎn):

    聲明必要的測(cè)試類



    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;
    ??? }

    }

    測(cè)試類:

    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);

    ??? }
    }

    默認(rèn)的輸出為:
    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

    可以看到只是實(shí)例化了一次


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

    public aspect LogAspect perthis(logMethod(TestBean)){

    ??? ....

    ??? }
    }

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

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

    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


    每個(gè)方法都創(chuàng)建相應(yīng)的實(shí)例。


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

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

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357872
    • 排名 - 156

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲第一成年网站视频| 曰批免费视频播放在线看片二| 日韩毛片免费无码无毒视频观看 | 两性刺激生活片免费视频| 成人区精品一区二区不卡亚洲| 亚洲av再在线观看| 未满十八18禁止免费无码网站| 亚洲 欧洲 视频 伦小说| ZZIJZZIJ亚洲日本少妇JIZJIZ| 91久久青青草原线免费| 黄色a级免费网站| 久久精品国产亚洲AV香蕉| 女人与禽交视频免费看| 国内精品免费在线观看| 亚洲精品理论电影在线观看| 亚洲乱码精品久久久久..| 色婷婷7777免费视频在线观看| 亚洲免费日韩无码系列| 亚洲人6666成人观看| 国产精品亚洲高清一区二区| 在线观看特色大片免费视频| 免费在线观影网站| 亚洲暴爽av人人爽日日碰| 亚洲日本中文字幕| 亚洲Av无码国产情品久久| 国产又大又粗又长免费视频| 丝袜足液精子免费视频| 日韩国产欧美亚洲v片| 亚洲毛片免费视频| 国产亚洲精品岁国产微拍精品| 日韩免费一级毛片| 999在线视频精品免费播放观看| 国产免费内射又粗又爽密桃视频| 中文文字幕文字幕亚洲色| 久久亚洲AV午夜福利精品一区 | 亚洲成aⅴ人片久青草影院| 最近的中文字幕大全免费版| 24小时免费看片| 久久久久成人片免费观看蜜芽| 三年片在线观看免费观看大全中国| 亚洲一区二区无码偷拍|