文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

aop切面、注解和参数怎么获取

2023-06-26 04:40

关注

本篇内容介绍了“aop切面、注解和参数怎么获取”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在工作中会经常使用aop,这里将aop使用基本方法,获取在切点中使用的获取参数、注解做一个样例。

定义需要切面的注解

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface AnnDemo {    String value();    boolean isAop() default true;}

在需要进行切面的方法标注注解

@RestController@RequestMapping("/order")public class OrderController {    @Autowired    private OrderService orderService;    @RequestMapping("/all")    @AnnDemo(value = "all",isAop = false)    public List<TbOrder> findAll() {        List<TbOrder> list = orderService.getOrderList();        return list;    }    @RequestMapping("/page")    @AnnDemo(value = "page")    public List<TbOrder> findPage(@RequestParam("username") String username) {        List<TbOrder> listPage = orderService.getOrdersListPage();        return listPage;    }}

定义切面

在切面中获取切点注解,方法,参数的获取

@Aspect@Componentpublic class AspectDemo {    @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..))")    public void excetionMethod() {}    @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")    public void excetionNote() { }    @Before("excetionMethod()")    public void testBefore(JoinPoint joinPoint) {        System.out.println("----------------------------前置通知---");        Object[] args = joinPoint.getArgs();        for (Object arg : args) {            System.out.println(arg);        }    }    @Around(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")    public Object  testBeforeNote(ProceedingJoinPoint joinPoint) throws Throwable {        //用的最多通知的签名        Signature signature = joinPoint.getSignature();        MethodSignature msg=(MethodSignature) signature;        Object target = joinPoint.getTarget();        //获取注解标注的方法        Method method = target.getClass().getMethod(msg.getName(), msg.getParameterTypes());        //通过方法获取注解        AnnDemo annotation = method.getAnnotation(AnnDemo.class);        Object proceed;        //获取参数        Object[] args = joinPoint.getArgs();        System.out.println(annotation.value());        System.out.println(annotation.isAop());        for (Object arg : args) {            System.out.println(arg);        }        if (Objects.isNull(annotation) || !annotation.isAop()) {            System.out.println("无需处理");            proceed = joinPoint.proceed();        }else {            System.out.println("进入aop判断");            proceed = joinPoint.proceed();            if(proceed instanceof List){                List proceedLst = (List) proceed;                if(!CollectionUtils.isEmpty(proceedLst)){                    TbOrder tbOrder = new TbOrder();                    tbOrder.setPaymentType("fffffffffffffffffff");                    ArrayList<TbOrder> tbOrderLst = new ArrayList<>();                    tbOrderLst.add(tbOrder);                    return tbOrderLst;                }            }            System.out.println(proceed);        }        return proceed;    }}

aop中获取自定义注解的属性值

自定义注解

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface SystemLog {     public String description() default "";}

用在方法上

@ResponseBody@ValidRequestBody@RequestMapping("/login")@SystemLog(description="登录")public GlobalResponse login(@RequestBody @Valid User user, BindingResult bindingResult){    ......}

获取注解的属性值

@Around("@annotation(com.xxx.xxx.xxx.SystemLog)")public Object around(ProceedingJoinPoint joinPoint) throws Throwable{    SystemLog systemLog = ((MethodSignature)joinPoint.getSignature()).getMethod().getAnnotation(SystemLog.class);        ......}

“aop切面、注解和参数怎么获取”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯