站長資訊網
最全最豐富的資訊網站

基于schema的風格AOP

基于schema的風格
先看一下配置文件(aop_config_schema.xml):

<?xml version=”1.0″ encoding=”UTF-8″?> 
<beans xmlns=”http://www.springframework.org/schema/beans” 
           xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 
  xmlns:aop=”http://www.springframework.org/schema/aop”  
        xsi:schemaLocation=” 
[url]http://www.springframework.org/schema/beans[/url]
[url]http://www.springframework.org/schema/beans/spring-beans-2.0.xsd[/url] 
[url]http://www.springframework.org/schema/aop[/url] 
[url]http://www.springframework.org/schema/aop/spring-aop-2.0.xsd[/url]> 
<!– 
有了schema的支持,切面就和常規的Java對象一樣被定義成application context中的一個bean。 
對象的字段和方法提供了狀態和行為信息,XML文件則提供了切入點和通知信息。 
正如下面這個bean指向一個沒有使用 @Aspect 注解的bean類, 
但是這個類會在下面被配置為一個切面的backing bean(支持bean)。 
–> 
<bean id=”aBean” class=”com.xyz.myapp.AspectExample2″> 
  … 
</bean> 
<!– 
配置文件中: 
所有的AOP配置是在<aop:config>標簽中設置的,所有的切面和通知器都必須定義在 <aop:config> 元素內部。 
一個application context可以包含多個 <aop:config>。 
一個 <aop:config> 可以包含pointcutadvisoraspect元素(注意它們必須按照這樣的順序進行聲明)。 
如果想強制使用CGLIB代理,需要將 <aop:config> 的 proxy-target-class 屬性設為true 
–> 
<aop:config> 
  <!–頂級(<aop:config>)切入點: 
  直接在<aop:config>下定義,這樣就可以使多個切面和通知器共享該切入點。–> 
  <aop:pointcut id=”businessService” 
  expression=”execution(* com.xyz.myapp.service.*.*(..))”/> 
  <!–這里使用命名式切入點,只在JDK1.5及以上版本中支持。–> 
  <aop:pointcut id=”businessService” 
  expression=”com.xyz.myapp.SystemArchitecture.businessService()”/> 

  <!–切面使用<aop:aspect>來聲明,backing bean(支持bean)通過 ref 屬性來引用–> 
  <aop:aspect id=”myAspect” ref=”aBean”> 
    <!–在切面里面聲明一個切入點:這種情況下切入點只在切面內部可見。–> 
    <aop:pointcut id=”businessService” 
    expression=”execution(* com.xyz.myapp.service.*.*(..))”/> 

    <!–Before通知–> 
    <aop:before 
   pointcut-ref=”dataAccessOperation” 
   method=”doAccessCheck”/> 
    <!–使用內置切入點:將 pointcut-ref 屬性替換為 pointcut 屬性–> 
    <aop:before 
   pointcut=”execution(* com.xyz.myapp.dao.*.*(..))” 
   method=”doAccessCheck”/> 

    <!–返回后通知–> 
    <aop:after-returning 
   pointcut-ref=”dataAccessOperation” 
   method=”doAccessCheck”/> 
    <!–@AspectJ風格一樣,通知主體可以接收返回值。使用returning屬性來指定接收返回值的參數名–> 
    <aop:after-returning 
   pointcut-ref=”dataAccessOperation” 
   returning=”retVal” 
   method=”doAccessCheck”/> 

    <!–拋出異常后通知–> 
    <aop:after-throwing 
   pointcut-ref=”dataAccessOperation” 
   method=”doRecoveryActions”/> 
    <!–@AspectJ風格一樣,可以從通知體中獲取拋出的異常。 
    使用throwing屬性來指定異常的名稱,用這個名稱來獲取異常–> 
    <aop:after-throwing 
   pointcut-ref=”dataAccessOperation” 
   thowing=”dataAccessEx” 
   method=”doRecoveryActions”/> 

    <!–后通知–> 
    <aop:after 
   pointcut-ref=”dataAccessOperation” 
   method=”doReleaseLock”/> 

    <!–Around通知:通知方法的第一個參數的類型必須是 ProceedingJoinPoint 類型–> 
    <aop:around 
   pointcut-ref=”businessService” 
   method=”doBasicProfiling”/> 
  </aop:aspect> 
</aop:config> 
</beans>

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品国产福利电影网| 国产精品情侣自拍| 久久91综合国产91久久精品| 国产精品亚洲精品日韩电影 | 色花堂国产精品第一页| 久久这里只精品国产免费10| aaaaaa精品视频在线观看| 这里只有精品视频| 亚洲欧洲日韩国产综合在线二区| 日韩精品免费在线视频| 久久99精品久久久久麻豆| 国产成人精品综合久久久久| 国产精品成人小电影在线观看| 日韩免费视频在线观看| 国产日韩一区二区三免费高清| 国产精品成人99一区无码| 无码国产69精品久久久久孕妇| 日产精品卡一卡二卡三的概述| 久热精品视频第一页| 色婷婷噜噜久久国产精品12p| 日韩va中文字幕无码电影| 国产精品剧情原创麻豆国产| 成人区人妻精品一区二区不卡| 精品国产日韩久久亚洲| 精品国产乱子伦一区二区三区| 3d精品重口littleballerina| 久久夜色精品国产噜噜亚洲AV| 久久久久久久99精品免费| 久久精品中文字幕首页| 久久国内精品自在自线400部o| 国99精品无码一区二区三区| 国产精品免费AV片在线观看| 国产精品丝袜黑色高跟鞋| 久久国产精品久久| 久久福利青草精品资源站免费 | 国产92成人精品视频免费| 91大神精品全国在线观看| 亚洲欧洲国产成人精品| 国产精品成人va在线观看| 国产精品素人搭讪在线播放| 2021国产精品成人免费视频|