Springboot中使用aop,与SSM中使用AOP,整体配置与编写方式都是类似的。但是Springboot简化了很多xml配置,切点的表达式可以直接进行javaconfig。

记录一些示例

springboot示例:

版本1.5.9.RELEASE

pom文件中添加aop的依赖

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

自定义注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* Target指定注解的目标为方法级
* Retention指定注解可以在运行时被获取(利用反射)
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CountAopAnnotation {
}

aop类:


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; /**
* aop
* Created by hxy 2018/5/5.
*/ @Component
@Aspect
@Order(10) //构建执行顺序
public class CountAopHelper { /*
* 定义一个切入点
*/
@Pointcut("@annotation(com.company.project.core.annotation.CountAopAnnotation)")
public void myInfoAnnotation() {
} // 用@Pointcut来注解一个切入方法
@Pointcut("execution(* com.company.project.web.*.*(..))")
public void excudeController() {
} @Before("myInfoAnnotation()")
public void deBefore(JoinPoint joinPoint) throws Throwable {
System.out.println("deBefore"); // 通过RequestContextHolder获取HttpServletRequest 可以获取请求头相关的内容
// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// StringBuffer requestURL = request.getRequestURL();
} @After("myInfoAnnotation()")
public void doAfter(JoinPoint joinPoint) throws Throwable {
System.out.println("doAfter"); // 通过RequestContextHolder获取HttpServletRequest 可以获取请求头相关的内容
// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// StringBuffer requestURL = request.getRequestURL();
} /**
* Around(环绕通知)是在Before(前置通知)前面执行
* &&@annotation(annotation) 这个是对方法参数的形参进行注入
* <p>
* value可以是多种 1纯注解形式 myInfoAnnotation() 2 混合 myInfoAnnotation()&&@annotation(annotation)&& excudeController()
* 使用场景 1大面积使用aop 使用Pointcut来写匹配表达式 2精准定位 使用注解形式
*/
@Around(value = "myInfoAnnotation()")
public Object doAround(ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println("doAround"); // 获取切点的参数
Object[] args = thisJoinPoint.getArgs(); //环绕通知必须执行,否则不进入注解的方法
return thisJoinPoint.proceed();
} }

使用:

在接口上加上注解

   @CountAopAnnotation
@GetMapping("/testAnno")
public Result testAnno() { System.out.println("here is api testAnno"); return ResultGenerator.genSuccessResult("dsds");
}

执行结果是:

先执行了环绕通知,再执行前置通知,再执行被aop代理的方法,再执行后置通知;

doAround
deBefore
here is api testAnno
doAfter

2507-AOP- springboot中使用-使用注解方式的更多相关文章

  1. springboot中的常用注解

    springboot中的常用注解个人觉得springboor中常用的注解主要可以分为三种:放入容器型注解.从容器中取出型注解和功能型注解.其中的放入容器型和从容器中取出型就是我们平时所说的控制反转和依 ...

  2. Jeecg中通过Spring_AOP+注解方式实现日志的管理

    转载;https://blog.csdn.net/ma451152002/article/details/77234236 Jeecg中通过Spring_AOP+注解方式实现日志的管理 一.设计思路 ...

  3. springboot中的controller注解没有生效

    springboot中的controller注解没有生效  , 启动的Application类没有在controller的父目录或同级目录

  4. 【归纳】springboot中的IOC注解:注册bean和使用bean

    目前了解的springboot中IOC注解主要分为两类: 1. 注册bean:@Component和@Repository.@Service.@Controller .@Configuration 共 ...

  5. SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)

    项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息.Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor .TaskScheduler 接口. ...

  6. SpringBoot集成websocket(java注解方式)

    第一种:SpringBoot官网提供了一种websocket的集成方式 第二种:javax.websocket中提供了元注解的方式 下面讲解简单的第二种 添加依赖 <dependency> ...

  7. SpringBoot 中 get/post 请求处理方式,以及requestboy为Json时的处理

    GET.POST方式提时, 根据request header Content-Type的值来判断: application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的 ...

  8. SpringBoot 中使用shiro注解使之生效

    在shiroConfig配置类中增加如下代码: /** * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro ...

  9. springboot中使用自定义注解实现策略模式,去除工厂模式的switch或ifelse,实现新增策略代码零修改

    前言 思路与模拟业务 源码地址 https://gitee.com/houzheng1216/springboot 整体思路就是通过注解在策略类上指定约定好的type,项目启动之后将所有有注解的typ ...

随机推荐

  1. 一些GIT操作的技巧

    一.git stash 我们有时会遇到这样的情况,正在分支a上开发一半,然后分支b上发现Bug,需要马上处理.这时候分支a上的修改怎么办呢,git add 是不行的,有的git客户端版本会提示还有ad ...

  2. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来. 问题原贴:计算订单中的老顾客复购率 感谢 ...

  3. [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)

    写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...

  4. 判断数据类型(typeof&instanceof&toString)

    一.数据类型 ES6规范中有7种数据类型,分别是基本类型和引用类型两大类 基本类型(简单类型.原始类型):String.Number.Boolean.Null.Undefined.Symbol 引用类 ...

  5. hexo + typora 图片插入解决办法

    Typora 是一款知名的 Markdown 编辑器,简单好用,体验良好.使用 hexo 搭建好博客后,主要是用 Markdown 来编写博客,typora 便是我的首选编辑器.但直接使用 typor ...

  6. dubbo是如何实现可扩展的?

    dubbo如何实现可扩展的,援引官网描述: Dubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来. Dubbo 改进了 ...

  7. 题解 CF1095F 【Make It Connected】

    题意简述 \(n\)( \(1≤n≤2×10^5\) )个点,每个点 \(i\) 有一个点权 \(a_i\) ( \(1≤a_i≤2×10^{12}\) ),将两个点 \(i\),\(j\) 直接相连 ...

  8. FastDFS 技术整理

    1.FastDFS 1.1.了解基础概念 1.1.1.什么是分布式文件系统? 全称:Distributed File System,即简称的DFS 这个东西可以是一个软件,也可以说是服务器,和tomc ...

  9. 接口测试postman深度挖掘应用③--postman终结篇

    上一章节我们介绍了postman的变量测试以及导入数据测试基本上技术性的东西已经差不过了,这篇文章再系统性的介绍一下. 一.下载 官网:https://www.postman.com 1.选择需要下载 ...

  10. JS:相等判断

    1.=  赋值运算符 错误写法:a+b = c; 2.== :=== ==判断值是否相等 例: var a = 2; var b = 3; var c = a+b; var d = "2&q ...