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

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

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

    隨筆-67  評論-522  文章-0  trackbacks-0
        通過之前一篇基于SSH2框架Struts2攔截器的登錄驗(yàn)證實(shí)現(xiàn)的文章,我們簡單的運(yùn)用了攔截器來實(shí)現(xiàn)功能,這次大象將在前面的基礎(chǔ)上再進(jìn)行一次擴(kuò)展,運(yùn)用AspectJ AOP切面實(shí)現(xiàn)登錄登出日志的功能。
        AOP切面是一個(gè)非常不錯(cuò)的特性,為我們帶來了一種新的編程方式,對代碼的無侵入性是它最大的特點(diǎn)。像上篇我們用到的Struts2攔截器就是AOP的一個(gè)典型運(yùn)用。從Spring的低版本開始就能夠?qū)崿F(xiàn)切面功能,但是非常麻煩,不過當(dāng)Spring升級到2.0之后,這一情況就徹底改變了。運(yùn)用JDK 5.0支持的注解特性,大大方便了我們的開發(fā)。在本篇中,大象將以AspectJ注解方式實(shí)現(xiàn)AOP的切面功能。
        在這里我還是假設(shè)一下,你已經(jīng)對Spring AOP有一個(gè)基本了解,至少知道AOP的基本概念,比如:切入點(diǎn),通知,切入表達(dá)式,橫切邏輯等等內(nèi)容。那么只需要在之前的基礎(chǔ)上做下小小的改變,就可以使用AspectJ實(shí)現(xiàn)日志的登錄登出功能。
        增加日志表
        記錄日志信息當(dāng)然需要日志表了,我們在數(shù)據(jù)庫中增加一個(gè)log表。
        
        增加實(shí)體類
        增加Log實(shí)體類,字段名與屬性名一致,這樣就可以不用加Column注解了。另外沒有其它的關(guān)聯(lián)關(guān)系,這個(gè)類很干凈,是一個(gè)純POJO類。具體請看源碼,這里就不貼出來了。
        增加切面類
        這就是本篇的關(guān)鍵所在了,定義切面類。common包下面再增加一個(gè)aop包,創(chuàng)建LogAspect類。
        
        在LogAspect類之上標(biāo)明@Aspect注解,指定此類為一個(gè)切面類。這樣的實(shí)現(xiàn)方式是不是很簡單?然后定義切入點(diǎn)與通知類型以及切入實(shí)現(xiàn)(一般叫做橫切增強(qiáng),其實(shí)就是切入之后想實(shí)現(xiàn)的功能)。這里我實(shí)現(xiàn)了兩個(gè)切入方法,一個(gè)是登錄,當(dāng)執(zhí)行完登錄操作,還沒有轉(zhuǎn)向到結(jié)果頁面時(shí)執(zhí)行;另一個(gè)是登出,在執(zhí)行登出之前調(diào)用橫切邏輯。最后一個(gè)是共用的保存日志方法,這里只是簡單的說明日志記錄如何實(shí)現(xiàn),可以對日志表進(jìn)行擴(kuò)充,比如增加用戶IDIP地址、模塊ID等等信息。
        @Before@After都是通知類型,前者是在連接點(diǎn)之前執(zhí)行,后者則是在連接點(diǎn)之后執(zhí)行。
        修改struts.xml
        增加一行配置<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />作用是確保Spring的自動裝配策略總是被考慮。默認(rèn)為false,如果不將它改為true,則在使用CGLib代理Action類后,使用@Autowired注入的service類將會為null,那么這些目標(biāo)方法中與數(shù)據(jù)庫交互的邏輯都不能執(zhí)行,所以一定要將它改為true
        修改applicationContext.xml
        添加<aop:aspectj-autoproxy proxy-target-class="true" />聲明,為Spring容器中那些匹配@AspectJ切面的Bean創(chuàng)建代理,其中的proxy-target-class="true" 表示使用CGLib動態(tài)代理技術(shù)織入增強(qiáng),不過只聲明還不行,還得織入,把編寫好的切面類完整路徑添加到配置文件中,這樣才能發(fā)揮切面的功能。
        到這里,所有工作都已經(jīng)完成,啟動服務(wù)器,來試一下,看看登入登出后,log表中是否會有記錄?呵呵,當(dāng)然會有了,要是沒有大象也不敢寫出來找罵了。通過這個(gè)實(shí)例,我們可以看到,運(yùn)用AOP的思想可以進(jìn)行無侵入式的開發(fā),這符合當(dāng)前非常強(qiáng)調(diào)的松耦合性,對以后的維護(hù)來講也相對會簡單一些。
        源碼下載: ssh2-aop
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。 http://bolo.blogjava.net/
    posted on 2011-05-13 23:07 菠蘿大象 閱讀(5975) 評論(2)  編輯  收藏 所屬分類: Struts2

    評論:
    # re: 基于SSH2框架AspectJ的登錄登出日志實(shí)現(xiàn) 2011-05-13 23:22 | 菠蘿大象
    去年9月就已經(jīng)寫好,一直沒有發(fā)出來,被一些亂七八糟的事情耽誤了,接下來,大象會連續(xù)放出Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解系列文章,Struts2已經(jīng)離我們遠(yuǎn)去,Spring MVC 3.0已經(jīng)開始進(jìn)入我們的視野,它的REST開放式特性,與Spring的無縫集成,以及Spring框架的優(yōu)秀表現(xiàn),現(xiàn)在已經(jīng)被很多公司作為新的系統(tǒng)開發(fā)框架,大象將結(jié)合剛剛完成的項(xiàng)目和之前的SSH2框架,整出一個(gè)便于理解的SSM框架出來,提供給大家學(xué)習(xí),希望寫的不對的或有更好建議的朋友多提寶貴意見。  回復(fù)  更多評論
      
    # re: 基于SSH2框架AspectJ的登錄登出日志實(shí)現(xiàn) 2011-05-18 14:31 | 菠蘿大象
    這里有個(gè)bug大象說下,就是log表中,logtime的數(shù)據(jù)類型為timestamp,這樣定義不是很好,應(yīng)該改為datetime,因?yàn)閠imestamp的時(shí)間段有限,只能表示1970-2038年,作為一個(gè)日期類型這樣是不好的,大象會修改一下,更新下博客和源碼  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲理论片中文字幕电影| 亚洲资源在线视频| 国产精品九九久久免费视频| 亚洲色偷拍另类无码专区| 中文字幕日本人妻久久久免费| 亚洲欧洲日产专区| 四虎影在线永久免费四虎地址8848aa| 亚洲阿v天堂在线2017免费| 亚洲黄色一级毛片| 国产小视频免费观看| 久久国产乱子伦精品免费强| 99久久国产亚洲综合精品| 亚洲av无码成人精品区| 一级毛片免费视频| 免费在线观看亚洲| 久久亚洲精品国产精品| 亚洲?V乱码久久精品蜜桃| 99久久99久久精品免费观看| 美女视频黄视大全视频免费的| 亚洲爱情岛论坛永久| 国产国产人免费人成免费视频| 无码少妇精品一区二区免费动态| 亚洲AV成人一区二区三区在线看| 国产亚洲?V无码?V男人的天堂 | 处破痛哭A√18成年片免费| 一级午夜免费视频| 亚洲av成人综合网| 亚洲国产日韩在线视频| 日韩一区二区三区免费体验| 免费无码又爽又刺激一高潮| 亚洲精品成a人在线观看夫| 亚洲AV日韩AV永久无码久久| 亚洲AV无码成H人在线观看| 99久久99久久精品免费看蜜桃 | 91久久精品国产免费直播| 一二三区免费视频| 色偷偷噜噜噜亚洲男人| 久久亚洲精品成人AV| 丝袜熟女国偷自产中文字幕亚洲| 最新69国产成人精品免费视频动漫| 日本免费一区二区三区|