【发布时间】:2013-05-06 04:31:54
【问题描述】:
我在使用切入点表达式建议方法时确实遇到了问题。 我有以下配置:
春季 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>
servlet.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 文档中,我了解到 spring 代理 与接口一起工作,因此我尝试将切入点定义更改如下:
@Pointcut("execution(* aa.bb.cc.dd.GenericDao.delete(..))")
但没有任何改变。
如何拦截UserDaoImpl类的.delete()方法?
【问题讨论】:
-
请从您的问题中删除重复的“objectDeletionPointcut”;)
-
@MarkusCoetzee 完成 :-)
标签: spring spring-aop pointcut