SpringBoot中使用aop-测试
面向切面编程(AOP),该种方式主要是为了弥补面向对象编程(OOP)的不足,通过配置切面以及关注点、通知等我们可以在程序的任意位置对我们的代码进行增强(执行一些代码),AOP是Spring的特性之一,通常我们使用AOP来实现日志的补记录以及实现一些声明式的事务等。
接下来,通过一个简单的例子来测试一下AOP如何使用:
1、pom.xml文件的依赖如下
<dependencies>
<!--1.单元测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--2.aop的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--3.cglib动态代理的依赖-->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.5</version>
</dependency>
<!--4.web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--5.小辣椒-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2、application.yml(springboot)的配置文件内容如下:

其中,server.port代表端口号(tomcat的端口号)
其他内容为自定义的内容,可通过@Value注解获取到内容值
${name}为使用表达式获取当前yml文件中对应的name的值
3、定义用于返回的类(使用RestController,返回json数据),代码如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private boolean success;
private String msg;
}
4、定义自己的Service类(模拟业务场景),代码如下:
@Service
public class JieService { public void todo(){
System.out.println("这是一个Service方法的调用!");
}
}
@Service :把该类注入Spring容器中,若需要使用,则通过@Autowired 注解获取
5、定义一个Controller类(控制类,模拟处理用户的请求),代码如下:
@RestController
public class JieController {
@Autowired
private JieService jieService;
// 使用yml配置文件中的参数
@Value("${content}")
public String content; @RequestMapping("/hello")
public Result hello(){
jieService.todo();
return new Result(true,content);
}
}
其中,@Autowired 注解则获取到Spring容器中我们通过@Service 注解注入的对象
@RestController 注解为标记返回的数据为json格式
@Value 注解则获取到application.yml 文件中对应的参数名的值,这里@Value(${content})的写法跟在yml中去到定义的值一样
6、配置一个切面类,且注入Spring容器中,通过@Aspect 标记为切面类、@Component 注入Spring容器中,并且添加一些测试方法,代码如下:
@Component // 注册到spring容器中
@Aspect // 标志为切面类
public class ServiceAdvice {
/**
* 解读:
* execution为固定写法
* public * com.jieku.service..*.*(..)
* 第一个 * 表示所有的返回参数
* 之后代表切入点的包名,其后跟着两个点(.)表示当前包及其所有的子包
* 两个点后的* 代表所有的类 =》 综合两个点加上* ..* 表示当前包及其所有子包的所有类
* 之后的点个人理解为调用方法,点后的*表示所有的方法,之后括号中的两个点.表示任意的参数个数
* 总的解答:拦截com.jieku.service的当前包及其子包中的所有类(任意的返回参数类型)的所有方法的调用(任意参数列表)
*/
@Pointcut("execution(public * com.jieku.service..*.*(..))")
public void good(){} @Before("good()")
public void before(){
System.out.println("之前拦截到了,并且执行了!");
} @After("good()")
public void after(){
System.out.println("之后也拦截到了,并且执行了!");
} /**
* @Ponitcut:表示切入点,理解为找到需要增强的方法执行我们定义的增强的代码
* 通知:
* @Before:前置通知,方法执行前执行该通知
* @After:后置通知,方法执行完成之后执行该通知
* @Around:环绕通知
* @AfterReturning:在返回之后执行该通知
* @AfterThrowing:在抛出异常后执行该通知
*/
}
7、执行效果如下:
在页面上输入:localhost:8080/hello,执行效果如下:

8、补充:启动类以及项目结构图
启动类代码如下:
@SpringBootApplication
public class JieApplication {
public static void main(String[] args) {
SpringApplication.run(JieApplication.class);
}
}
项目结构图如下:

9、后台的运行结果:

至此,简单测试成功!
SpringBoot中使用aop-测试的更多相关文章
- SpringBoot图文教程5—SpringBoot 中使用Aop
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- Springboot中使用AOP统一处理Web请求日志
title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...
- 在SpringBoot中配置aop
前言 aop作为spring的一个强大的功能经常被使用,aop的应用场景有很多,但是实际的应用还是需要根据实际的业务来进行实现.这里就以打印日志作为例子,在SpringBoot中配置aop 已经加入我 ...
- 编写SpringBoot 中的AOP
编写SpringBoot 中的AOP 在程序开发的过程中会使用到AOP的思想,面向切面进行开发,比如登录的验证,记录日志等等-频繁需要操作的步骤,在遇到这种情况时就要使用Spring 的AOP了 Sp ...
- SpringBoot中使用AOP打印接口日志的方法(转载)
前言 AOP 是 Aspect Oriented Program (面向切面)的编程的缩写.他是和面向对象编程相对的一个概念.在面向对象的编程中,我们倾向于采用封装.继承.多态等概念,将一个个的功能在 ...
- springboot中使用aop技术
aop是面向切面编程的意思,它可以需要先选择一些切入点,然后对这些切入点进行拦截,注入统一的代码逻辑,这也是解耦的一种方式,也是为了避免重复的代码,让开发人员把关注点放在业务上. 引用包 'org.s ...
- SpringBoot中使用 RabbitMQ -测试
本章主要建立在已经安装好Erlang以及RabbitMQ的基础上,接下来,简单介绍一下使用 1.首先到RabbitMQ的管理界面新建一个队列(Direct模式) 2.测试项目的基础结构如下: 这里为了 ...
- 在SpringBoot中使用Junit测试
一:加入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactI ...
- spring-boot中的AOP
public class User { private Integer id; private String username; private String note; public User(In ...
- SpringBoot中使用AOP实现计算Service执行时间
1.增加POM.XML的依赖架包 <!-- 引入 spring aop 依赖 --><dependency> <groupId>org.springframewor ...
随机推荐
- Spring Boot系列目录
1.spring mvc 接口动态注入 FactoryBean ImportBeanDefinitionRegistrar ClassPathScanningCandidateComponentPro ...
- OI程序常见的设计陷阱
宏定义的问题 有时候为了方便,我会大量使用宏定义.但是最近我发现下面这两个宏定义老是出问题: #define SET(x,a) memset(x,a,sizeof(x)) inline void wo ...
- tensorflow实现siamese网络 (附代码)
转载自:https://blog.csdn.net/qq1483661204/article/details/79039702 Learning a Similarity Metric Discrim ...
- Liunx反弹shell的几种方式
什么是反弹shell? 简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:http(https)://ip:80,这是因为在服务器上面开启了80端口的 ...
- dubbo服务层面上的负载均衡和高可用
dubbo上的服务层可以做集群,来达到负载均衡和高可用,很简单,只需要在不同的服务器节点上向同一个zk(内网环境)注册相同的服务 注意就是,消费者不能在同一个zk做这种集群操作的 转载请注明博客出处: ...
- 常用css模板
段落超出显示省略号(可单行多行) .p-content{ overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-b ...
- ECharts3D地图(详细示例——附有具体注释)
3D地图图表效果如下: 具体代码如下: <!DOCTYPE html><html><head> <meta charset="UTF-8" ...
- synchronized对象解析
package com.haiyisoft.hyoaPc; public class Test7 { public static void main(String[] args) throws Int ...
- k8s-helm01-----helm基本使用
什么是helm Helm 是 Kubernetes 生态系统中的一个软件包管理工具. 基础概念: Helm:客户端,主要负责管理本地的 Charts.repositories 以及与tiller服务器 ...
- centos7修改默认启动模式(图形/命令行)
centos7以后是这样的,7以前就是别的版本了 1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改 ...