<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 布衣郎 閱讀(1989) 評(píng)論(0)  編輯  收藏 所屬分類: aop

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

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 358015
    • 排名 - 156

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 九九九精品视频免费| 国产精品免费网站| 亚洲精品免费在线| 免费无码AV片在线观看软件| 美女啪啪网站又黄又免费| 亚洲精品无码国产| 女人18毛片水最多免费观看| kk4kk免费视频毛片| 亚洲精品综合久久中文字幕| 日本免费一区二区三区最新| 另类免费视频一区二区在线观看| 亚洲国产av高清无码| 亚洲午夜AV无码专区在线播放| 最近免费中文在线视频| 理论片在线观看免费| 亚洲日韩国产精品无码av| 亚洲?V无码乱码国产精品| 99久久这里只精品国产免费| 9久热这里只有精品免费| 波多野结衣亚洲一级| 亚洲AV无码不卡在线播放| 免费99热在线观看| 精品香蕉在线观看免费| 国产真人无码作爱免费视频| 亚洲精品无码国产片| 亚洲一区二区三区高清| 亚洲乱码中文字幕手机在线| 毛片a级毛片免费播放下载| 91老湿机福利免费体验| 久久免费99精品国产自在现线| 亚洲精品国产精品| 91亚洲性爱在线视频| 亚洲国产精品一区二区第一页| 免费一级国产生活片| 处破痛哭A√18成年片免费| 亚洲综合免费视频| 亚洲a一级免费视频| 中文成人久久久久影院免费观看| 美国毛片亚洲社区在线观看| 亚洲五月丁香综合视频| 亚洲综合成人网在线观看|