我正在使用Spring的
首先,我扩展Spring的
一切都很正常,我能够通过我的REST客户端调用这个方法。我不需要实现接口
我现在面临的问题是,在这个自定义的
到目前为止,我尝试过的方法是:
我也尝试了以下方法:
CrudRepository
和注解@RepositoryRestResource
结合使用,实现一个简单的CRUD应用程序,可通过RESTful API使用。现在我想在我的存储库上添加AspectJ连接点,以便每当调用接口中的CRUD方法时执行某些功能。首先,我扩展Spring的
CrudRepository
,在自己的接口中添加一些自定义功能:@RepositoryRestResource(collectionResourceRel = "customers", path = "customers")
public interface CustomerRestRepository extends CrudRepository<Customer, Integer>{
Customer findOneByGuid(@Param("customerGuid") String customerGuid);
//Other custom methods.
}
一切都很正常,我能够通过我的REST客户端调用这个方法。我不需要实现接口
CustomerRestRepository
,因为Spring在幕后执行了奇迹般的工作。这是扩展Spring的CrudRepository
的重要优点之一。我现在面临的问题是,在这个自定义的
findOneByGuid()
方法上添加一个AspectJ切点,例如,在它执行后记录每次调用方法。到目前为止,我尝试过的方法是:
@Aspect
public aspect AfterCustomerCrudAspect {
@Pointcut(
"execution(* com.x.y.z.CustomerRestRepository.findOneByGuid(..))")
public void customerCrudMethod() {}
@AfterReturning("customerCrudMethod()")
public void doSomething() {
//Do something
}
}
我也尝试了以下方法:
1) execution(* com.x.y.z.CustomerRestRepository+.findOneByGuid(..))
2) execution(* org.springframework.data.repository.Repository+.*(..))
3) within(com.x.y.z.CustomerRestRepository)
4) annotation(RepositoryRestResource)
......还有许多我不记得的其他建议。但它们都带来了同样令人沮丧的结果:这些建议从未被应用。
顺便说一句,我没有遇到任何异常,如果我尝试execution(* *.*(..))
,建议会正常工作——但是,当然,并不仅限于方法findOneByGuid()
。因此,我认为我的代码总体上是正确的。
我知道不能在接口上设置切入点。但由于我不必自己实现接口CustomerRestRepository
即可使事情正常工作,我需要找到一种方法在接口的方法上设置切入点或找到其他解决方案。
好吧,解决这个问题的一个可能的方法是实现接口CustomerRestRepository
。但是然后我必须自己完成存储库的所有实现工作,并跳过使用Spring的CrudRepository
的优势。
因此,我的问题是,是否有可能在Spring CrudRepository
的方法上设置AspectJ切入点。
非常感谢您提前提供的所有答案。