spring aop execution表現の使い方


1.すべてのcontrollerの下の要求を切ります。
プロジェクト構造
**这里写图片描述**
任意の公共方法の実行:

execution(public * (…))
葃葃publicは省略できます。第一の代表方法の任意の戻り値第二のパラメータは任意のパック+種類+方法(…)を表します。
切込み点の設定:

@Pointcut("execution(* com.gcol.qy.web.system.controller..*.*(..))")
public void conPoint(){}
式の構造は次のように説明されています。
識別子
意味
execution()
式の本体
最初の「*」記号
戻り値の種類を任意に表します。
col.qy.web.system.com ntroller
AOPで切断したサービスのパッケージ名、すなわち、横に切断する必要がある業務類
パッケージ名の後ろの「.」
現在のカバンと子供のカバンを表します。
二つ目の「*」
クラス名*はすべてのクラスです。
.*(.)
任意の方法名、括弧はパラメータ、二つの点は任意のパラメータタイプを表します。
複数の接線点が必要であれば、𞓜𞓜符号を使って次のようにすることができる。

@Pointcut("execution(* com.gcol.qy.web.system.controller..*.*(..)) || execution(* com.gcol.qy.web.system.api..*.*(..))")
public void conPoint(){}
xml設定

 <!--      kpi   oracle    -->
 <aop:config>
  <aop:aspect id="dataSourceAspect2" ref="dataSourceInterceptor">
   <aop:pointcut id="daoThree" expression="execution(* com.gcol.qy.web.system.service.kpi.KpiServiceImpl.*(..))
   || execution(*  com.gcol.qy.web.system.service.team.TeamServiceImpl.getFamilyPremiun(..))
   || execution(*  com.gcol.qy.web.system.service.team.TeamServiceImpl.getSalesmanPremium(..))"/>
   <aop:before pointcut-ref="daoThree" method="setDataSourceKpi"/>
  </aop:aspect>
 </aop:config>
ref=「dataSourceInterceptor」が実行する方法クラスです。
2.Springにおけるexecution文法
文法書式
execution(修繕子の返却タイプの切り込み点類の切り込み方法(パラメータ)の異常ショット)
  • 修繕子:オプションで、ワイルドカードをサポートします。
  • リターンタイプ:必須、ワイルドカードサポート、*を使用してすべての戻り値タイプ
  • にマッチすることができます。
  • エントリポイントクラス:オプションで、ワイルドカードをサポートし、ポイントクラス
  • を指定します。
  • 入力点方法:必須、ワイルドカードサポート、マッチングする方法名を指定し、「*」ワイルドカードを使用して、すべての方法にマッチすることができます。
  • パラメータ:無記入の場合、指定方法声明のイメージリストは、2つのワイルドカード、すなわち*と
  • をサポートします。
    ここで*は任意のタイプのパラメータを表し、…はゼロまたは複数の任意のタイプのパラメータを表します。
  • ()任意のパラメータを受け付けない方法にマッチする
  • (…)任意の数のパラメータを受け入れる方法に適合することは、ゼロまたは複数の
  • であってもよい。
  • (*)は、一つのタイプのパラメータを受け入れる方法と一致します。一つの
  • だけです。
  • (*、String)は、2つのパラメータを受け入れる方法と一致し、第1のパラメータは任意のタイプであり、第2のパラメータは、Stringタイプ
  • でなければならない。
    例外投げ:オプション、ワイルドカード対応、指定方法宣言の投げ出し異常
    一般的な例
    
    <!-- 【1、    public  】 -->
    <aop:pointcut expression="execution(public * *(..))" id="pt"/>  
    
    <!-- 【2、    save     】 -->
    <aop:pointcut expression="execution(* save*(..))" id="pt"/> 
    
    <!-- 【3、          ,             】 -->
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
    
    <!-- 【4、          】 -->
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.*(..))" id="pt"/>
    
    <!-- 【5、     ,              】 -->
    <aop:pointcut expression="execution(* com..*.*(..))" id="pt"/>
    
    <!-- 【6、   】 -->
    <!--  :||   or -->
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) || execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
    
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) or execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
    
    <!--  :&&   and -->  <!--       , ,    -->
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) && execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
    
    <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) and execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
    
    <!-- 【7、   :not  !          ,             】 -->
    <aop:pointcut expression="!execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/> <!--   not       -->
    
    <aop:pointcut expression=" not execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
    
    以上は個人の経験ですので、参考にしていただければと思います。