我有 @Tenantable 注释来决定 pointCut :@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic @interface Tenantable {}这是我的方面: @Slf4j @Aspect @Configuration public class TenancyAspect { @Pointcut("execution(public * *(..))") public void publicMethod() {} @Around("publicMethod() && @within(com.sam.example.aspect.aspectexample.model.Tenantable)") public Object tenatable(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("my operations ..."); return joinPoint.proceed(); } }这对于这个服务类没有任何问题:@Tenantable@Servicepublic class MyService(){ public void doSomething(){ ... }}当我调用 doSomething() 方法时,我的方面正在运行,没关系,但我想为属于 spring 数据的 CrudRepository 接口实现方面。我已经改变了我的方面来实现这个,如下所示:@Slf4j@Aspect@Configurationpublic class TenancyAspect { @Pointcut("execution(public * *(..))") public void publicMethod() {} @Pointcut("this(org.springframework.data.repository.Repository)") public void repositoryExec(){} @Around("publicMethod() && repositoryExec() && @within(com.sam.example.aspect.aspectexample.model.Tenantable)") public Object tenatable(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("my operations ..."); return joinPoint.proceed(); }}这是存储库:@Tenantable@Repositorypublic interface MyRepository extends CrudRepository{}但是当我调用 MyRepository 中的任何方法时它不起作用。有没有办法做到这一点?编辑: 当我应用这些时,它适用于所有存储库:@Pointcut("execution(public * org.springframework.data.repository.Repository+.*(..))")并排除这个:@within(com.sam.example.aspect.aspectexample.model.Tenantable)但是我需要这个注释才能将它应用于特定的存储库。
添加回答
举报
0/150
提交
取消