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

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

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

    隨筆-42  評論-349  文章-4  trackbacks-0

           (殘夢追月原創,轉載請注明)

    本文地址:http://m.tkk7.com/cmzy/archive/2008/08/17/222624.html

     

         我們一直使用ProxyFactoryBean來顯式的創建AOP代理。但是在很多場合,這種方式將會使編寫配置文件的工作量大大增加;由于要從ProxyFactoryBean獲得代理對象,也會使應用和Spring之間的耦合度增加。下面介紹使用Spring提供的自動代理機制來解決這類問題。

    1、使用BeanNameAutoProxyCreator

           Spring提供的BeanNameAutoProxyCreator類允許我們通過Bean的name屬性來指定代理的Bean。它暴露了java.lang.String[]類型的beanNames和 interceptorNames屬性。beanNames可以指定被代理的Bean名字列表,支持“*”通配符,例如“*DAO”表示所有名字以“DAO”結尾的Bean。interceptorNames指定通知(Advice)列表,或者通知者(Advisor)列表。

            下面通過一個例程來演示如何使用BeanNameAutoProxyCreator。在例子中,有兩個Bean:TestBeanA和BeanB,并在TestMain類中的main方法中調用其MyMethod()方法。自動代理將會在方法調用前自動的執行配置的前置通知,輸出提示信息。

    新建一個名字為AOP_Test4.10的工程,添加Spring的IoC和AOP庫后,新建一aop.test包,再分別創建兩個類TestBeanA和BeanB,添加MyMethod()方法,代碼如下:



      再創建前置通知類BeforeAdvice:

      最后創建含有main方法的測試類TestMain:

      在配置文件中配置Bean和自動代理Bean,完成后代碼如下:

      運行主類,輸出結果如下:

    AutoProxy1

      可以看到,在主類TestMain中,我們是直接從Spring IoC容器中獲取收管Bean而不是像以前那樣從ProxyFactoryBean中獲取代理,但是我們的前置通知BeforeAdvice仍然在TestBeanA對象的MyMethod()方法執行前被觸發,這說明我們的自動代理正在工作。

     

    2、使用DefaultAdvisorAutoProxyCreator

      DefaultAdvisorAutoProxyCreator允許我們只需定義相應的Advisor通知者,就可以完成自動代理。配置好DefaultAdvisorAutoProxyCreator受管Bean后,它會自動查找配置文件中定義的Advisor,并將它們作用于所有的Bean。

    修改例程4.10的配置文件,使用DefaultAdvisorAutoProxyCreator來完成自動代理。完成后配置文件代碼如下(本例完整工程代碼見例程4.11):

      運行主類輸出結果如下:

    AutoProxy2



    By:殘夢追月
    posted on 2008-08-20 19:02 殘夢追月 閱讀(8239) 評論(11)  編輯  收藏 所屬分類: Spring

    評論:
    # re: Spring自動代理機制 2008-08-17 22:26 | 殘夢追月
    Live Write寫得日志為什么不能用blogjava自帶的編輯器編輯呢?編一次格式就要變……汗啊……  回復  更多評論
      
    # re: Spring自動代理機制 2008-08-17 22:37 | BeanSoft
    .... 是很郁悶.  回復  更多評論
      
    # re: Spring自動代理機制 2008-08-17 22:43 | 殘夢追月
    @BeanSoft
    第一次用Live Writer,很不習慣……
    今天安裝都花了一個小時……
    找它的代碼高亮插件又找了好幾個小時……
    簡直無語了啊……
    但是還是喜歡現在的新代碼樣式,雖然比不上javaEye的,但也比原來哪個好看多了……呵呵。  回復  更多評論
      
    # re: Spring自動代理機制 2008-08-18 10:47 | 菠蘿大象
    blogjava的代碼插入真的做不好,太難看了,特別是java代碼插入。應該學一下javaeye的,不過blogjava一篇文章可以寫很多這點不錯,不像javaeye一篇文章得分成幾篇發出來,汗死  回復  更多評論
      
    # re: Spring自動代理機制 2008-08-18 13:20 | 殘夢追月
    @菠蘿大象
    呵呵,我現在也會用javaeye那種樣式來修飾blogjav上的代碼了……呵呵  回復  更多評論
      
    # re: Spring自動代理機制 2008-09-03 10:39 | kangojian
    學習了 謝謝!敬禮  回復  更多評論
      
    # re: Spring自動代理機制 2008-09-03 10:59 | 殘夢追月
    @kangojian
    不客氣……:-)  回復  更多評論
      
    # re: Spring自動代理機制[未登錄] 2010-08-17 12:54 | eric
    沒有看到其對應的輸出結果,攔截器的信息沒有打印出來

    除了此配置外,還需要配置別的東西嗎?  回復  更多評論
      
    # re: Spring自動代理機制[未登錄] 2013-04-20 23:06 | Jason
    org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator

    樓主的第一個demo貌似得不到那個效果,至于錯誤的原因我還沒找出來...  回復  更多評論
      
    # re: Spring自動代理機制 2013-07-19 10:04 | 234567
    他寫的好象不對,缺少一句話:method.invoke();

      回復  更多評論
      
    # re: Spring自動代理機制[未登錄] 2014-06-16 17:51 | rosen
    樓主,你這是對類進行代理,需要CGLIB支持,建議新加個接口,這樣就可以使用JDK代理了。  回復  更多評論
      
    主站蜘蛛池模板: 国产亚洲精品看片在线观看| 啦啦啦在线免费视频| 伊人久久大香线蕉亚洲| 成人免费网站久久久| 亚洲国产人成精品| 99在线热播精品免费99热| 亚洲综合av永久无码精品一区二区| 有码人妻在线免费看片| 国产AV无码专区亚洲AWWW| a在线观看免费网址大全| 小说区亚洲自拍另类| 亚洲?V无码成人精品区日韩| 免费的黄网站男人的天堂| **毛片免费观看久久精品| 国产精品国产免费无码专区不卡 | 国产精品亚洲mnbav网站 | 免费亚洲视频在线观看| 久久av无码专区亚洲av桃花岛| 久久A级毛片免费观看| 中文字幕人成人乱码亚洲电影 | 免费国产黄网站在线看| 久久影视国产亚洲| 亚洲精品免费在线观看| 亚洲欧洲日产国码www| 在线观看无码的免费网站| 免费一级全黄少妇性色生活片| 亚洲精品~无码抽插| 精品国产污污免费网站aⅴ | 大地资源中文在线观看免费版| 亚洲蜜芽在线精品一区| selaoban在线视频免费精品| 亚洲国产一区二区a毛片| 三年片在线观看免费大全| 全部在线播放免费毛片| 亚洲狠狠久久综合一区77777| 18禁超污无遮挡无码免费网站国产| 日日摸日日碰夜夜爽亚洲| 久久亚洲AV午夜福利精品一区| 51午夜精品免费视频| 亚洲欧洲日产国码www| 亚洲黄黄黄网站在线观看|