神魂顛倒

          Memo

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 3 文章 :: 3 評論 :: 0 Trackbacks

          When 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.

          posted on 2008-07-25 22:53 star 閱讀(135) 評論(0)  編輯  收藏 所屬分類: Spring

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 舒城县| 洪洞县| 鹤庆县| 富锦市| 漳平市| 长葛市| 卢龙县| 内乡县| 左贡县| 栾城县| 东港市| 商河县| 彭山县| 罗平县| 保亭| 柯坪县| 伊通| 丰宁| 宝鸡市| 剑河县| 娄底市| 泸水县| 安化县| 辉南县| 镇安县| 高唐县| 象山县| 汽车| 城口县| 磐石市| 米易县| 四子王旗| 开江县| 山阴县| 辉县市| 兴义市| 瑞丽市| 台南县| 涟水县| 威远县| 八宿县|