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

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

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

    美麗涵涵童裝店--說我博客名字,給你們打折!
    隨筆 - 82  文章 - 266  trackbacks - 0
    <2007年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456


    點(diǎn)擊這里給楊愛友發(fā)消息
    美麗涵涵童裝店
    說我博客名字,給你們打折!

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章檔案

    好友的BLOG

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    里面有些概念描述或觀點(diǎn)可能不正確,歡迎批評指正。

    1. 使用代理對象將日志等與業(yè)務(wù)邏輯無關(guān)的東西或任務(wù)提取出來,設(shè)計(jì)為一個服務(wù)對象,這樣的對象稱之為 切面。
    2. 將日志、安全檢查等這類的動作或服務(wù)設(shè)計(jì)為通用的、不介入特定業(yè)務(wù)對象的個職責(zé)清楚的Aspect對象,這就是所謂的面向切面編程(AOP)。
    3. 在這種編程模式之下,Aspect可以獨(dú)立于應(yīng)用程序之外,在必要的時(shí)候,可以介入應(yīng)用呈現(xiàn)之中提供服務(wù),在不需要相關(guān)服務(wù)的時(shí)候,又可以將這些Aspect直接從應(yīng)用程序中脫離出來,而應(yīng)用程序本身不需要修改任何一行程序代碼。
    4. AOP術(shù)語:書中提到了9個關(guān)鍵術(shù)語,分別是Cross-cutting concern、Apect、Advice、Joipoint、Pointcut、Target、Introduction、Proxy、Weave
        像日志、安全檢查這類動作在AOP中稱之為Cross-cutting concern;將散落于各個義務(wù)邏輯之中的Cross-cutting  concern收集起來,設(shè)計(jì)成一個獨(dú)立可重用的對象,這個對象稱為Aspect。Cross-cutting concern的具體實(shí)現(xiàn)稱之為Advice,包括Cross-cutting concern的行為或要提供的服務(wù);Joipoint、Pointcut這兩個術(shù)語分不清,暫時(shí)都當(dāng)作切入點(diǎn)來說吧,就是要執(zhí)行Advice的時(shí)機(jī)或叫地方;Target很明白,就是一個Advice被應(yīng)用的目標(biāo)對象;Introduction可以對一個以編寫或編譯完的類,在執(zhí)行時(shí)動態(tài)增加一些方法或行為,而不用修改這個類的碼在JS中太常見;Weave織入,Advice被應(yīng)用至目標(biāo)對象的過程。
    5. Advice實(shí)現(xiàn)了Aspect的真正邏輯,具體來說在Java中就是一個類或一個方法。一個類可以有多個Advice。由于織入Targets的時(shí)機(jī)不同,Spring 提供了不同的Advices接口,如Before Advice、After Advice、Around Advice、Throw Advice,見其名知其意,如Before Advice,是在目標(biāo)對象或方法執(zhí)行前執(zhí)行Advice。
    6. PointCut與Advisor:上面說的各種Advice都是直接織入至代理的接口執(zhí)行前后,織入實(shí)際只定義到對象級別。而利用pointCut和Advisor可以將織入目標(biāo)定位到具體的方法前后。PointCutAdvisor接口提供PointCut實(shí)例,用語定義更細(xì)粒度的織入實(shí)際,他的第一個實(shí)現(xiàn)類是NameMatchMethodPointCutAdvisor,用一個表示式去匹配方法名稱,匹配成功的方法都會織入指定的Advice。
    7. 仔細(xì)體會:Spring AOP是通過代理機(jī)制來實(shí)現(xiàn)的,因而需要建立代理對象。
        Adivice可以理解為想日志、權(quán)限判斷之類的動作,通過某些方法將這些動作插入到被代理對象,生成一個新的對象,這個新的對象就是代理對象,這種方式就叫代理機(jī)制。
        在Spring中,將多個Adivce放到一個對象中,成為一個通用的服務(wù)對象,這叫Aspect,將這個Aspect插入到一組對象或方法中,這個過程就是用的代理機(jī)制。
    8. Introduction類似JS中的混合的構(gòu)造函數(shù)/原型方法來構(gòu)造對象,先定義一個對象,然后再想對象Introduction方法。好象沒什么用途。
    9. 以上實(shí)現(xiàn)AOP的代理模式都為靜態(tài)代理,它為每一個目標(biāo)對象都定義一個代理Bean,當(dāng)項(xiàng)目龐大時(shí)這顯然是行不通的。解決方案就是使用動態(tài)代理,在AutoProxing中,我們可以通過Bean名稱和PointCut對比,自動為符合條件的目標(biāo)對象建立代理對象。在我看來,靜態(tài)代理確實(shí)沒什么用武之地,動態(tài)代理能很好的工作。
    10. 以上都是Spring1.0就有的東西,在2.0以后對于AOP功能的實(shí)現(xiàn)新增了兩種方式:一種是基于XML Schema的設(shè)置;一種 是基于Annotation的支持。看到這里才發(fā)現(xiàn)前面的其實(shí)沒啥用了,以后就直接用XML Schema方式就是了。
    11. ???Spring的核心是AOP、DI、IOC,他主要是用來管理后臺,當(dāng)然做為一個MVC框架,自然不得不提供controller功能,而其他的如<spring:bind>之類的標(biāo)簽很多余,這豈不是在頁面上也偶合進(jìn)了spring 的東西。
    12. 最后用BeforeAdvice來說明的Spring AOP的用法及原理。
    其他類型的Advice如After Advice、Around Advice、Throw Advice用法都是類似的。
    首先定義目標(biāo)對象必須實(shí)現(xiàn)的接口:
    1 public interface IHello {
    2     public void hello(String name);
    3 }

    定義目標(biāo)對象,讓其實(shí)現(xiàn)IHello接口:
    1 public class HelloSpeaker implements IHello{
    2     public void hello(String name){
    3         System.out.println("Hello, " + name);
    4     }
    5 }

    定義一個Advice,它實(shí)現(xiàn)了MethodBeforeAdvice接口:
    Before Advice會 在目標(biāo)對象的方法執(zhí)行之前被調(diào)用,你需要實(shí)現(xiàn)aop.MethodBeforeAdvice接口來定義Before Advice邏輯。該接口只有一個方法before(),就是在目標(biāo)對象的方法執(zhí)行前要自行的動作。
    1 public class LogBeforeAdvice implements MethodBeforeAdvice{
    2 private Logger logger = Logger.getLogger(this.getClass().getName());
    3     public void before(Method method, Object[] arg1, Object arg2) throws Throwable {
    4         logger.log(Level.INFO,"method starts" + method);
    5     }
    6 }

    編寫bean定義文件:
     1     <bean id="logBeforeAdvice" class="beforeAdvice.LogBeforeAdvice"/>
     2     <bean id="helloSpeaker" class="beforeAdvice.HelloSpeaker"/>
     3     
     4     <!-- 定義一個bean,它被用來生成代理對象,提供通用服務(wù) -->
     5     <bean id="helloProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     6         <property name="proxyInterfaces" value="beforeAdvice.IHello"/><!--定義代理時(shí)可使用的接口 -->
     7         <property name="target" ref="helloSpeaker"/><!-- 目標(biāo)對象,如果不定義target,acvice將會用至實(shí)現(xiàn)IHello接口的所有類 -->
     8         <property name="interceptorNames"><!-- 設(shè)置Adivce實(shí)例,可設(shè)置一個或多個Advice -->
     9             <list>
    10                 <value>logBeforeAdvice</value>
    11             </list>
    12         </property>
    13     </bean>
    14 <!--注意:在不定義目標(biāo)方法時(shí),Advice將會用于所有方法之前-->

    最后編寫一個測試程序:
    1 public class SpringAOPDemo {

    3     public static void main(String[] args) {
    4         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    5         IHello helloProxy = (IHello)ctx.getBean("helloProxy");//根據(jù)bean定義文件定義的proxyInterfaces屬性生成HelloSpeaker的代理對象
    6         helloProxy.hello("yangay");
    7     }
    8 }
    從這個例子中可以看到,對于HelloSpeaker來說,它并不知道LogBeforeAdvice的存在,而LogBeforeAdvice也可以運(yùn)用至其他的對象之上,有效地提供對象的重用性。
    posted on 2007-09-06 00:06 楊愛友 閱讀(1483) 評論(4)  編輯  收藏 所屬分類: java相關(guān)技術(shù)

    FeedBack:
    # re: spring 2.0使用手冊學(xué)習(xí)筆記(二)  2007-09-06 15:22 睿不可當(dāng)
    老是看你的blog 不冒個泡 對不起你
    呵呵  回復(fù)  更多評論
      
    # re: spring 2.0使用手冊學(xué)習(xí)筆記(二)  2007-09-06 23:54 楊愛友
    冒泡,別憋著了,你的地址呢?我還不知道。  回復(fù)  更多評論
      
    # re: spring 2.0使用手冊學(xué)習(xí)筆記(二)  2007-09-07 22:03 zrq
    以上實(shí)現(xiàn)AOP的代理模式都為靜態(tài)代理,它為每一個目標(biāo)對象都定義一個代理Bean,當(dāng)項(xiàng)目龐大時(shí)這顯然是行不通的。解決方案就是使用動態(tài)代理,在AutoProxing中,我們可以通過Bean名稱和PointCut對比,自動為符合條件的目標(biāo)對象建立代理對象。在我看來,靜態(tài)代理確實(shí)沒什么用武之地,動態(tài)代理能很好的工作。

    項(xiàng)目越大,越應(yīng)該使用靜態(tài)代理,要不然,出措很難找.  回復(fù)  更多評論
      
    # re: spring 2.0使用手冊學(xué)習(xí)筆記(二)  2008-04-01 09:34 Aspectj
    @zrq
    但是動態(tài)代理的性能負(fù)載很大,在性能較為敏感的項(xiàng)目上,可能問題更多  回復(fù)  更多評論
      
    美麗涵涵童裝店
    親,說我博客名字,給你們打折!
    主站蜘蛛池模板: 国产成人无码免费网站| 久久午夜无码免费| 亚洲精品成人无码中文毛片不卡 | 久久久久成人片免费观看蜜芽| 亚洲黄色高清视频| 日韩一区二区三区免费体验| 国产成人精品免费视频大全| 亚洲人成影院在线高清| 全亚洲最新黄色特级网站| 一个人免费视频在线观看www | 99久久免费国产精品热| 亚洲美女精品视频| 国产乱色精品成人免费视频 | 亚洲国产午夜中文字幕精品黄网站| 91成人免费观看在线观看| 国产亚洲精品成人AA片| 亚洲日韩欧洲无码av夜夜摸| 一二三四免费观看在线视频中文版| 国产伦精品一区二区免费| 免费观看亚洲人成网站| 午夜无码A级毛片免费视频| 免费播放国产性色生活片| 亚洲国产成人综合| 久久精品国产亚洲Aⅴ香蕉| 成年女人毛片免费播放人| 免费在线中文日本| 美女露100%胸无遮挡免费观看| 国产a不卡片精品免费观看| 一区二区三区福利视频免费观看| 美女裸免费观看网站| 亚洲乱码中文字幕小综合| 亚洲av永久无码精品古装片| 免费午夜爽爽爽WWW视频十八禁 | 亚洲人成影院在线观看| 中文字幕无码免费久久99| 精品国产麻豆免费人成网站| 丰满妇女做a级毛片免费观看| 亚洲风情亚Aⅴ在线发布| 亚洲国产精品成人综合久久久| 亚洲毛片αv无线播放一区| 国产一区二区三区无码免费|