为了账号安全,请及时绑定邮箱和手机立即绑定

CrudRepository 和 Annotation 上的 Spring + AspectJ

CrudRepository 和 Annotation 上的 Spring + AspectJ

梵蒂冈之花 2021-06-15 13:01:03
我有 @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)但是我需要这个注释才能将它应用于特定的存储库。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信