今年是2017年12月29日,是阳历17年最后一个工作日,写下今年最后一篇博客。回首一年过去,虽涉猎广泛,但仍感觉空乏、浪费,所学甚少。18年仍须“老夫聊发少年狂”,“西北望射天狼”。不再废话,码完这篇博客。

AOP切面,就我个人理解,他是可以在被访问的接口的开始、结束、过程中植入一些处理,来满足业务需要、代码的封装。

一、注入依赖

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-aop</artifactId>
</dependency> 

二、书写切面类

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;/*** Created by 赵亚辉 on 2017/12/29.*/
@Component
@Aspect
public class WebControllerAop {//切面应用的目录@Pointcut("execution(* com.yunxiao.crawler.newzujuan.web..*.*(..))")public void executeService(){}/*** 前置通知,方法调用前被调用* @param joinPoint*/@Before("executeService()")public void doBeforeAdvice(JoinPoint joinPoint){System.out.println("Before");}/*** 环绕通知:*   环绕通知非常强大,可以决定目标方法是否执行,什么时候执行,执行时是否需要替换方法参数,执行完毕是否需要替换返回值。*   环绕通知第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型*/@Around("executeService()")public Object doAroundAdvice(ProceedingJoinPoint proceedingJoinPoint){System.out.println("Around..."+proceedingJoinPoint.getSignature().getName());try {Object obj = proceedingJoinPoint.proceed();return obj;} catch (Throwable throwable) {throwable.printStackTrace();}return null;}/*** 后置最终通知(目标方法只要执行完了就会执行后置通知方法)* @param joinPoint*/@After("executeService()")public void doAfterAdvice(JoinPoint joinPoint){System.out.println("After");}/**
* 后置返回通知
* 这里需要注意的是:
*      如果参数中的第一个参数为JoinPoint,则第二个参数为返回值的信息
*      如果参数中的第一个参数不为JoinPoint,则第一个参数为returning中对应的参数
* returning 限定了只有目标方法返回值与通知方法相应参数类型时才能执行后置返回通知,否则不执行,对于returning对应的通知方法参数为Object类型将匹配任何目标返回值
* @param joinPoint
* @param keys
*/ @AfterReturning(value = "executeService()",returning = "keys")public void doAfterReturningAdvice1(JoinPoint joinPoint,Object keys){System.out.println("AfterReturning..."+keys);}/*** 后置异常通知*  定义一个名字,该名字用于匹配通知实现方法的一个参数名,当目标方法抛出异常返回后,将把目标方法抛出的异常传给通知方法;*  throwing 限定了只有目标方法抛出的异常与通知方法相应参数异常类型时才能执行后置异常通知,否则不执行,*      对于throwing对应的通知方法参数为Throwable类型将匹配任何异常。* @param joinPoint* @param exception*/@AfterThrowing(value = "executeService()",throwing = "exception")public void doAfterThrowingAdvice(JoinPoint joinPoint,Throwable exception){//目标方法名:System.out.println(joinPoint.getSignature().getName());if(exception instanceof RuntimeException){System.out.println("AfterThrowing");}}

三、他们的执行顺序

环绕--》前置--》接口-(后置异常)-》后置最终--》后置返回

spring-boot集成aop相关推荐

  1. Spring Boot 集成AOP

    在这里多谈一些关于AOP 方面的知识,如果你对AOP 方面的知识比较熟悉,可以直接略过这个段落,往下看. 一.AOP概述 AOP(面向切面编程) 概念:这种在运行时,动态地将代码切入到类的指定方法.指 ...

  2. Spring Boot 集成 Mybatis 实现双数据源

    转载自   Spring Boot 集成 Mybatis 实现双数据源 这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源 ...

  3. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

    1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...

  4. Spring Boot集成Swagger导入YApi@无界编程

    接口APi开发现状 现在开发接口都要在类似YApi上写文档,这样方便不同的团队之间协作,同步更新接口,提高效率. 但是如果接口很多,你一个个手工在YApi去录入无疑效率很低. 如果是使用Spring ...

  5. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

  6. 6.3 Spring Boot集成mongodb开发

    6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...

  7. springboot(十八):使用Spring Boot集成FastDFS

    上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...

  8. Spring Boot集成Hazelcast实现集群与分布式内存缓存

    2019独角兽企业重金招聘Python工程师标准>>> Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸 ...

  9. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  10. 【Java进阶】Spring Boot集成ES

    目录 spring boot集成ES ElasticSearchConfig 测试文档的基本操作 Elasticsearch Clients 文档 spring boot集成ES Java REST ...

最新文章

  1. usr libexec java_osx – 如何更改从/ usr/libexec/java_home返回的Mac操作系统的默认Java虚拟机...
  2. android stadio 快捷键最好的材料 android stadio大全 最牛逼的android stadio快捷键
  3. python 重复采样,不重复采样
  4. 【Android 逆向】ELF 文件格式 ( 程序头数据 | 节区头数据 | 动态符号表 )
  5. 2021-04-21--中标麒麟--yum源修改
  6. Intellij idea requested without authorization请求页面未经授...
  7. LINUX关于休眠、待机和睡眠的问题
  8. 使用pyenv和virtualenv搭建python虚拟环境
  9. windows安装软件最好使用独立的文件夹
  10. H.265流媒体播放器EasyPlayer.js如何调用VUE?
  11. centos7.8安装CDO
  12. 开源公告|腾讯代码安全指南开源,涉及C/C++、Go等六门编程语言
  13. JVAV SE学习总结(01)
  14. matlab将surfer格式转化矩阵,matlab调用surfer
  15. 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
  16. 超火 3D 照片墙,你学废了吗?
  17. EEMD(集合经验模态分解)
  18. ping: www.baidu.com: 域名解析暂时失败 简单解决
  19. iOS自动化测试-环境搭建
  20. 互联网晚报 | 10月15日 星期五 | 抖音否认进入外卖行业;孩子王创业板成功上市;领英中国宣布关闭内容发布与互动功能...

热门文章

  1. 把你的名字写在煙上,吸进肺里 留在离我心脏最近的地方
  2. 报错TypeError: Cannot set property ‘type‘ of undefined
  3. [附源码]JAVA+ssm基于框架的流浪动物保护平台(程序+Lw)
  4. tensorflow中slim详解
  5. 虚拟机网络图标不见了
  6. 【问题解决】Ubuntu18.04 网络图标不见了,显示有线未托管
  7. 人工智能技术自发展伊始就与人有着千丝万缕的联系
  8. 中体彩软件研发笔试题
  9. 《MetaSploit渗透测试魔鬼训练营》之信息搜集
  10. 学习Java的第三周