springboot切面配置

文章目的

记录我网上学习切面的实现过程

此次只是在学习过程中,想要记录请求的过程的一些信息,还会继续学习改进。下面是实现过程:

切点

要实现切面,@Aspect注解不能少,必须告诉spring去识别这个类,@Component为了启动springboot项目的时候扫描到这个类。

@Aspect
@Component

既然是切面类,那切点就不能少。
@Pointcut主要是提供一个切点,而execution据说是个函数,用来匹配连接点
execution(方法修饰符 返回类型 方法名 参数 异常)
其中方法修饰符和异常是可选的

    @Pointcut("execution(public * com.example.controller.*.*(..))")public void sysLog(){}

准备好切点了,接下来就是五种切面的方法了,

第一种

@Before 前置通知,也叫前置增强。为了保证在高并发情况下可以不会使日志打印顺序乱掉,所以改为了bean,没有使用logger.info这种使用方式。此处的JoinPoint参数,可以加也可以不加,这个类主要提供请求信息的ip,方法名等等。

 ThreadLocal<Long> startTime = new ThreadLocal<Long>();@Before("sysLog()")public void doBefore(JoinPoint joinPoint){startTime.set(System.currentTimeMillis());//请求消息ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String str = (String) request.getSession().getAttribute("name");String username = request.getParameter("username");// 记录下请求内容SysLogBean bean = new SysLogBean();bean.setId(UUID.randomUUID().toString().replace("-",""));bean.setUsername(username);bean.setIp(request.getRemoteAddr());bean.setMethodName(request.getMethod());bean.setClassName(joinPoint.getSignature().getDeclaringTypeName()+":"+joinPoint.getSignature().getName());bean.setCreateDate(new Date());bean.setRemoteHost(request.getRemoteHost());bean.setUrl(request.getRequestURL().toString());sysLogService.insertSysLog(bean);}
第二种

后置通知,或者后置增强。ret是方法的返回值,我没有用到。

    @AfterReturning(returning = "ret",pointcut = "sysLog()")public void doAfterReturn(Object ret){//记录日志过程消费时间log.info("time : " + (System.currentTimeMillis()-startTime.get()));}
第三种

当方法抛出异常时执行,这块的异常可以通过我们做全局异常,抛出我们想要的东西。

 //这是我注入的全局异常的类@Autowiredprivate ExceptionHandle exceptionHandle;//后置异常@AfterThrowing("sysLog()")public void doAfterThrews(JoinPoint joinPoint){}
第四种

后置通知或后置增强

    //后置通知,都会执行@After("sysLog()")public void doAfter(JoinPoint joinPoint){}
第五种

环绕通知或环绕增强

 @Around("sysLog()")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {}

最重要的一点不要忘了导入jar包,或者maven依赖

        <!--    实现切面    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

目前还在学习改进,简单记录,防止忘记!!!!!!

springboot切面配置相关推荐

  1. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  2. SpringBoot 全局事务配置

    前言 传统springboot实现事务只需要在方法上添加@Transactional注解,但是需要在所有的service都加上事务,相对比较麻烦,随着项目的庞大,功能模块会随之增多,所以就需要采用AO ...

  3. 【springboot】配置

    配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...

  4. SpringBoot自动配置的原理及实现

    SpringBoot的核心就是自动配置,自动配置是基于条件判断配置Bean 自动配置的源码在spring-boot-autoconfigure-2.2.13.RELEASE SpringBoot运行原 ...

  5. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:你在我家门口 juejin.im/post/5ce5effb ...

  6. SpringBoot之配置嵌入式Servlet容器

    1.概述 文章目录 1.概述 2.如何修改SpringBoot的默认配置 3.定制和修改Servlet容器的相关配置 4.注册Servlet三大组件 5.替换为其他嵌入式Servlet容器 6.嵌入式 ...

  7. springboot中配置了拦截器后,拦截器无效的解决方案之一

    springboot中配置了拦截器后,拦截器无效的解决方案之一 参考文章: (1)springboot中配置了拦截器后,拦截器无效的解决方案之一 (2)https://www.cnblogs.com/ ...

  8. 【Spring框架家族】SpringBoot自动配置基本实现

    SpringBoot自动配置-Condition_1 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean @Conditio ...

  9. springboot起步配置和自动配置原理

    一.起步配置 1.起步配置Ctrl+左键进入 2.springboot自动识别resources目录下以application开头的配置文件 3.spring-boot-starter-parent又 ...

最新文章

  1. MySQL总结连接查询
  2. mysql5.1.6安装_mysql 5.1.6的安装启动
  3. c语言程序stm8s,stm8s的c语言编程例程
  4. 显示控制器注释_欧姆龙可编程控制器CS1D-CPU产品型号说明及功能介绍
  5. python客户端修改session_Python接口自动化之cookie、session应用
  6. python读取xml文件
  7. iOS安全攻防(七)使用iOSOpenDev开发SpringBoard的Tweat
  8. 万兆网文件服务器,万兆以太网网卡网吧服务器中的应用
  9. 推荐几本微积分入门书籍
  10. 信号处理--几种常见的窗函数
  11. 119、交换机基本配置命令
  12. 【Word】论文公式居中,编号右对齐
  13. 什么是弹性(display: flex)布局 ?
  14. CleanMyMacX4.11.3最新版mac电脑磁盘清理工具功能
  15. 7-1 计算物体自由下落的距离
  16. Docker 安装和部署
  17. 热带地区数据中心需要太阳能发电,而不是自然冷却
  18. 基于一维卷积Conv1D实现猫狗叫声语音识别
  19. 企业微信封号规则及解封
  20. 大佬们的“受锤”往事

热门文章

  1. 小说分享《相互的感情》2
  2. 蒋鸿翔:网易数据基础平台建设
  3. 腾讯地图离线地图接入指南
  4. android apk无法安装及闪退问题
  5. 写代码也有本手俗手之分,而我们要善于发现妙手!
  6. Freemarker作用以及使用
  7. 每个公司老板容易忽略的危机
  8. Spark部分算子及使用
  9. 【go】defer的使用
  10. 千万不要在朋友圈发“原图”,不然你的信息分分钟泄露(一)