我有 @Tenantable 注釋來(lái)決定 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(); } }這對(duì)于這個(gè)服務(wù)類沒(méi)有任何問(wèn)題:@Tenantable@Servicepublic class MyService(){ public void doSomething(){ ... }}當(dāng)我調(diào)用 doSomething() 方法時(shí),我的方面正在運(yùn)行,沒(méi)關(guān)系,但我想為屬于 spring 數(shù)據(jù)的 CrudRepository 接口實(shí)現(xiàn)方面。我已經(jīng)改變了我的方面來(lái)實(shí)現(xiàn)這個(gè),如下所示:@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(); }}這是存儲(chǔ)庫(kù):@Tenantable@Repositorypublic interface MyRepository extends CrudRepository{}但是當(dāng)我調(diào)用 MyRepository 中的任何方法時(shí)它不起作用。有沒(méi)有辦法做到這一點(diǎn)?編輯: 當(dāng)我應(yīng)用這些時(shí),它適用于所有存儲(chǔ)庫(kù):@Pointcut("execution(public * org.springframework.data.repository.Repository+.*(..))")并排除這個(gè):@within(com.sam.example.aspect.aspectexample.model.Tenantable)但是我需要這個(gè)注釋才能將它應(yīng)用于特定的存儲(chǔ)庫(kù)。
添加回答
舉報(bào)
0/150
提交
取消