ポイントカット式を使用したメソッドのアドバイスに本当に問題があります。私は次の構成を持っています:
春 3.1.2.RELEASE
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>
サーブレット.xml
<aop:aspectj-autoproxy/>
アドバイスしたいクラス
@Repository(value="userDaoImpl")
@Transactional
public class UserDaoImpl implements UserDao{
//attributes and methods
@Override
public void delete(ProfiledUser user) throws HibernateException
{
sessionFactory.getCurrentSession().delete(user);
}
}
UserDao
インターフェイスを拡張するインターフェイスを実装しますGenericDao<T>
これが私のアドバイスです
@Aspect
@Component("userDeletionAspect")
public class UserDeletionAspect {
@Pointcut("execution(public void aa.bb.cc.dd.UserDaoImpl.delete(..))")
public void objectDeletionPointcut(){}
@Before("objectDeletionPointcut()")
public void notifyDeletion(JoinPoint jp)
{
System.out.println("pointcut executed");
}
}
これは機能しません。これは、UserDaoImpl の delete メソッドが実行されたときに、まったく傍受されないことを意味します。
Spring Documentation から、Spring プロキシがインターフェイスで動作することを読んだので、Pointcut 定義を次のように変更しようとしました。
@Pointcut("execution(* aa.bb.cc.dd.GenericDao.delete(..))")
しかし、何も変わりません。クラスの.delete()
メソッドをインターセプトするにはどうすればよいですか?UserDaoImpl