用注解的方式管理切面

扫包+参数的方式实现切面

以前总是使用配置扫包的配置+入参来管理控制切面,类似这样

@Aspect
@Component
public class TestAspect {
    @Pointcut("execution(public com.*.api.impl..*(..))  AND args(com.*.TestRequest))")
    public void accessControl() {
    }
    
     @Around(value = "Pointcut()")
   public Object doAround(ProceedingJoinPoint invocation) throws Throwable {
       Object[] args = invocation.getArgs();
       Object obj = null;
       try {
			// 前置处理
			***
		
           //调用实际业务方法
           obj = invocation.proceed(args);
           return obj;
       } catch (Exception e) {
           e.printStackTrace();
           return obj;
       }
   }
}

但这种方式总是不灵活。

  • 这代表了被切面管控的类方法,总是只能存在于一个包下,且使用固定的入参
  • 这代表了该包下使用这个入参的方法必定需要被切面管控

那又更灵活一点的管控方式吗?

用注解来管理切面

首先自己搞一个自定义的注解

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TestApi {
}

切面指定管控的类用注解来管理

@Aspect
@Component
public class TestAspect {
    @Pointcut(value = "@within(com.***.annotations.TestApi)")
    public void mtopPointCut() {

    }

    @Around(value = "Pointcut()")
    public Object doAround(ProceedingJoinPoint invocation) throws Throwable {
        Object[] args = invocation.getArgs();
        Object obj = null;
        try {
			// 前置处理
			***
		
            //调用实际业务方法
            obj = invocation.proceed(args);
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            return obj;
        }
    }
}

此时需要这个切面管控的类,只需给上这个自定义的注解,调用类下的方法时都会过这个切面

@TestApi
public class TestServiceImpl {
    public String operate(Strin[] arg) {
        ******
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值