8

dao呼び出しにアドバイスする次のアスペクトを宣言しました。@Beforeアドバイスを実行しようとしていますが、機能しません。

ここにアスペクトがあります。

package com.hedgebenefits.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AccessControlAspect {
    @Before("within(com.hedgebenefits.daos..*) && execution(public * *(..))")
    public void daoCall() {
        System.out.println("Before advice invoked for DAO method called ");
    }
}

私のapplication-context.xmlには次のタグがあります

<aop:aspectj-autoproxy/>

私のDaoクラスは次のとおりです。

package com.hedgebenefits.daos.impl;

import com.hedgebenefits.daos.AdminDao;
import com.hedgebenefits.domain.Admin;
import org.springframework.stereotype.Repository;

@Repository
public class AdminDaoImpl implements AdminDao{
    @Override
    public void save(Admin admin) {
    }
}

ブレークポイントを設定しましたが、アクティブではないことがわかります。ここでは間違いなくばかげた間違いをしていますが、理解できません。Pl。助言。

4

1 に答える 1

9

アスペクトは、アプリケーション コンテキストの一部である必要があります。

  1. を使用している場合はcomponent-scan、 に追加@Componentするか、フィルタをAccessControllerAspect設定して注釈を含めます。フィルターをセットアップするには、Spring ドキュメントのセクション 3.10.3 (フィルターを使用してスキャンをカスタマイズする) を参照してください。component-scan@Aspect
  2. xml 構成を使用している場合は、 の Bean を追加しますAccessControllerAspect

追加するという行為はaop:aspectj-autoproxy十分ではありません。これは、既にアプリケーション コンテキストの一部であるBeanにアスペクトの実行方法を通知しますが、それらは自動的には含まれません。

于 2012-08-20T20:43:20.700 に答える