站长资讯网
最全最丰富的资讯网站

基于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号