即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          博客好友

          最新評論

          Spring筆記之九(AOP in Spring)

          Spring IoC和 Spring AOP組合,一起形成了Spring,這樣一個有機整體,使得構(gòu)建輕量級的J2EE架構(gòu)成為可能,而且事實證明,非常有效。沒有Spring IoC的Spring AOP是不完善的,沒有Spring AOP的Spring IoC是不健壯的。 本文研究Spring框架中的面向方面編(Aspect-Oriented Programming,AOP),進而通過例子解析如何運用Spring中的所有通知類型和切入點來實現(xiàn)更實用的方面和面向方面設(shè)計模式。

          ??? AOP概念:
          ??? Advice:如何將before通知、afterReturning通知和afterThrowing通知聲明為bean。
           Pointcut如何聲明靜態(tài)切入點邏輯以將XML Spring Bean Configuration文件中的所有內(nèi)容聯(lián)系在一起。
           Advisor:關(guān)聯(lián)切入點定義與通知bean的方式。

          ??? Spring AOP是使用代理來完成的,Spring 兩種方式:JDK動態(tài)代理,需要設(shè)定一組代理接口;CGLIB 代理,可代理接口和類。Spring提供了5種Advice類型:Interception Around、Before、After Returning、Throw和Introduction。它們分別在以下情況下被調(diào)用:在JointPoint前后、JointPoint前、 JointPoint后、JointPoint拋出異常時、JointPoint調(diào)用完畢后。

          配置文件:

          ?1?<beans>
          ?2?????<bean?id="myAOPProxy"
          ???????????? class
          ="org.springframework.aop.framework.ProxyFactoryBean">
          ?3?????????<property?name="proxyInterfaces">
          ?4?????????????<value>ITest</value>
          ?5?????????</property>
          ?6?????????<property?name="target">
          ?7?????????????<ref?local?=?"test"/>
          ?8?????????</property>
          ?9?????????<property?name="interceptorNames">
          10?????????????<value>myPotincutAdvisor</value>
          11?????????</property>
          12?????</bean>
          13?????
          14?????<bean?id="test"?class="Test"/>
          15?????
          16?????<bean?id="MyInterceptor"?class="MethodTimeCostInterceptor"/>
          17?????
          18?????<bean?id="myPotincutAdvisor"
          ???????????? class
          ="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
          19?????????<property?name="advice">
          20?????????????<ref?local="MyInterceptor"/>
          21?????????</property>
          22?????????<property?name="patterns">
          23?????????????<list>
          24?????????????????<value>.*</value>
          25?????????????????<value>.*</value>
          26?????????????</list>
          27?????????</property>
          28?????</bean>
          29?</beans>

          分析代碼:
          1<bean?id="myAOPProxy"
          ???? class
          ="org.springframework.aop.framework.ProxyFactoryBean">聲明注入了代理實例myAOPProxy。 ??????
          2、 proxyInterfaces聲明將被代理接口ITest。

          3、 target聲明被代理目的類。
          4interceptorNames設(shè)置攔截器為myPotincutAdvisor
          5、
          patterns為攔截器設(shè)置配匹方式,即在所被配匹成功的方法被調(diào)用時執(zhí)行攔截器內(nèi)容。

          ??? 該配置文件,指定要加載一個接口與ITest相匹配的bean。該bean隨后被關(guān)聯(lián)到Test實現(xiàn)類。看起來好像是費了很大力氣只為了加載一個簡單的bean并調(diào)用一個方法,但是這個配置文件只是使 Spring框架可以透明地對應(yīng)用程序應(yīng)用其組件的眾多特性的一個體現(xiàn)


          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調(diào)華麗/簡單生活/完美人生

          posted on 2007-09-29 01:50 poetguo 閱讀(1047) 評論(1)  編輯  收藏 所屬分類: Spring

          評論

          # re: Spring筆記之九(AOP in Spring) 2007-09-29 02:44 gfsd

          ee zhen e!  回復(fù)  更多評論   

          主站蜘蛛池模板: 大兴区| 陈巴尔虎旗| 额尔古纳市| 女性| 昆山市| 邮箱| 德清县| 田林县| 朝阳区| 双城市| 江津市| 象州县| 木兰县| 齐齐哈尔市| 桂林市| 贞丰县| 西乌珠穆沁旗| 陕西省| 哈密市| 穆棱市| 元江| 怀来县| 行唐县| 博乐市| 澄江县| 将乐县| 宝鸡市| 凤阳县| 宁陕县| 马山县| 疏附县| 铜梁县| 新乐市| 利川市| 新沂市| 上栗县| 武鸣县| 东兰县| 龙州县| 乐业县| 桑日县|