我使用Spring的CrudRepository
结合注释@RepositoryRestResource
实现一个简单的CRUD,应用程序,可以throught一个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
因为春天做的工作在后面的一个奇迹。 这是延伸泉的关键优势之一CrudRepository
。
这个问题,我现在面对的,是对这个自定义的方法 添加一个AspectJ切入点 findOneByGuid()
将,例如,登录方法的每次调用它的执行之后。
什么我迄今所尝试的是:
@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
。
因此, 我的问题是,如果有设置一个AspectJ切入点就在Spring方法的可能性CrudRepository
。
提前非常感谢所有的答案。