2

Spring Data JPA リポジトリのメソッドが呼び出されたときにアドバイスが実行されるポイントカットを定義しようとしています。

これが私の匿名のポイントカットとインラインアドバイス(からPliEventManagerAspect)です:

after(Pli pli) returning: (execution(* org.springframework.data.repository.CrudRepository+.save(Pli)) && args(pli)){
    System.out.println("Caught!!!!");   
}

ここに私のPliRepositoryの定義があります:

public interface PliRepository extends GlobalRepository<Pli, Long>, PliRepositoryCustom {

および PliRepositoryImpl:

public class PliRepositoryImpl extends QueryDslRepositorySupport implements PliRepositoryCustom {

および PliRepositoryCustom:

public interface PliRepositoryCustom {

そして最後に GlobalRepository:

@NoRepositoryBean
public interface GlobalRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {

javaagent コマンドライン引数も設定しました。そして、次の aop.xml があります。

<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN"
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-verbose">
        <include within="org.springframework.data.repository..*"/>
    </weaver>
    <aspects>
        <aspect name="trc.suivi.aspects.PliEventManagerAspect" />
    </aspects>
</aspectj>

上記のアドバイスは、jar 内のクラスにアドバイスしているため、LTW で実行されるはずですが、まったく実行されません...ポイントカットの定義に間違いがあるはずです。誰でも助けてもらえますか?

4

1 に答える 1

1

次の構成に変更しました。

aop.xml:

<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN"
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-verbose"></weaver>
    <aspects>
        <aspect name="trc.suivi.aspects.PliEventManagerAspect" />
    </aspects>
</aspectj>

したがって、ウィーバーはすべてのクラスをスキャンします。

PliEventManagerAspect.aj :

after(Pli pli) returning: (execution(* org.springframework.data.repository.CrudRepository+.save(*)) && args(pli)){
        log.debug("Caught!!!!");  
    }

現在は機能しています (Spring Forums の Marten に感謝します)。

于 2012-10-08T14:23:51.713 に答える