锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久一区二区三区蜜桃,免费久久精品,欧美日韩国产成人在线91http://www.aygfsteel.com/star/category/33292.htmlMemozh-cnFri, 25 Jul 2008 16:20:12 GMTFri, 25 Jul 2008 16:20:12 GMT60Sharing common pointcut definitionshttp://www.aygfsteel.com/star/articles/217586.htmlstarstarFri, 25 Jul 2008 14:53:00 GMThttp://www.aygfsteel.com/star/articles/217586.htmlhttp://www.aygfsteel.com/star/comments/217586.htmlhttp://www.aygfsteel.com/star/articles/217586.html#Feedback0http://www.aygfsteel.com/star/comments/commentRss/217586.htmlhttp://www.aygfsteel.com/star/services/trackbacks/217586.htmlWhen working with enterprise applications, you often want to refer to modules of the application and particular sets of operations from within several aspects. We recommend defining a "SystemArchitecture" aspect that captures common pointcut expressions for this purpose. A typical such aspect would look as follows:

 

package com.xyz.someapp;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class SystemArchitecture {

  
/**
   * A join point is in the web layer if the method is defined
   * in a type in the com.xyz.someapp.web package or any sub-package
   * under that.
   
*/

  @Pointcut(
"within(com.xyz.someapp.web..*)")
  
public void inWebLayer() {}

  
/**
   * A join point is in the service layer if the method is defined
   * in a type in the com.xyz.someapp.service package or any sub-package
   * under that.
   
*/

  @Pointcut(
"within(com.xyz.someapp.service..*)")
  
public void inServiceLayer() {}

  
/**
   * A join point is in the data access layer if the method is defined
   * in a type in the com.xyz.someapp.dao package or any sub-package
   * under that.
   
*/

  @Pointcut(
"within(com.xyz.someapp.dao..*)")
  
public void inDataAccessLayer() {}

  
/**
   * A business service is the execution of any method defined on a service
   * interface. This definition assumes that interfaces are placed in the
   * "service" package, and that implementation types are in sub-packages.
   * 
   * If you group service interfaces by functional area (for example, 
   * in packages com.xyz.someapp.abc.service and com.xyz.def.service) then
   * the pointcut expression "execution(* com.xyz.someapp..service.*.*(..))"
   * could be used instead.
   *
   * Alternatively, you can write the expression using the 'bean'
   * PCD, like so "bean(*Service)". (This assumes that you have
   * named your Spring service beans in a consistent fashion.)
   
*/

  @Pointcut(
"execution(* com.xyz.someapp.service.*.*(..))")
  
public void businessService() {}
  
  
/**
   * A data access operation is the execution of any method defined on a 
   * dao interface. This definition assumes that interfaces are placed in the
   * "dao" package, and that implementation types are in sub-packages.
   
*/

  @Pointcut(
"execution(* com.xyz.someapp.dao.*.*(..))")
  
public void dataAccessOperation() {}

}

The pointcuts defined in such an aspect can be referred to anywhere that you need a pointcut expression. For example, to make the service layer transactional, you could write:

 

<aop:config>
  
<aop:advisor 
      
pointcut="com.xyz.someapp.SystemArchitecture.businessService()"
      advice-ref
="tx-advice"/>
</aop:config>

<tx:advice id="tx-advice">
  
<tx:attributes>
    
<tx:method name="*" propagation="REQUIRED"/>
  
</tx:attributes>
</tx:advice>

The <aop:config> and <aop:advisor> elements are discussed in Section 6.3, “Schema-based AOP support”. The transaction elements are discussed in Chapter 9, Transaction management.



star 2008-07-25 22:53 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 清涧县| 宁德市| 来安县| 江口县| 德清县| 英吉沙县| 尼玛县| 石楼县| 上栗县| 合山市| 沙坪坝区| 游戏| 巴林右旗| 淮南市| 公安县| 常宁市| 光山县| 穆棱市| 荃湾区| 大邑县| 即墨市| 游戏| 新邵县| 平陆县| 宝鸡市| 龙游县| 卓尼县| 仙桃市| 河东区| 会同县| 长治市| 汨罗市| 延川县| 兴城市| 东兴市| 东乡族自治县| 华蓥市| 科技| 特克斯县| 平舆县| 托克逊县|