在Spring Boot框架中使用AOP的正确姿势

所属分类: 软件编程 / java 阅读数: 26
收藏 0 赞 0 分享

前言

Spring Boot是基于Spring的用来开发Web应用的框架,功能与Spring MVC有点类似,但是Spring Boot的一大特点就是需要的配置非常少。Spring Boot推荐convention over configuration,也就是约定大于配置,因此Spring Boot会帮你做许多自动的配置,并且Spring Boot使用的是Java Config,几乎可以做到零XML文件配置。

假设现在有这样一种场景,需要统计某个接口的处理耗时,我们可以使用AOP来实现,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。在Spring Boot中使用AOP也非常简单,只需要一点简单的配置即可。

需要使用AOP的类

@RestController
public class DownloadController {

 @Autowired
 private XmlDownloadService downloadService;

 @Autowired
 private XmlFileClearService clearService;

 @RequestMapping("/download")
 @Timer
 public String download() throws Exception {
  downloadService.download();
  clearService.compress();
  clearService.clearAll();
  return "ok";
 }
}

这是一个使用@RestController注解的Controller类,这个类会去下载一些XML文件,然后压缩,最后删除下载的XML文件。现在我们要统计整个处理过程的耗时,使用AOP来实现。在download上使用了一个@Timer注解,这是一个自定义的普通注解,用来标记这个方法作为一个切点。

Aspect类

@Aspect
@Component
public class VipAspect {

 private static final Logger logger = LoggerFactory.getLogger(VipAspect.class);

 private long start;

 //定义切点
 @Pointcut("@annotation(cn.magicwindow.mlink.content.annotation.Timer)")
 public void timer(){}

 //在方法执行前执行
 @Before("timer()")
 public void before() {
  start = System.currentTimeMillis();
 }

 //在方法执行后执行
 @After("timer()")
 public void after() {
  long now = System.currentTimeMillis();
  logger.info("job took time {}s in summary", (now - start) / 1000);
 }
}

这里使用了注解来标记切点,也可以直接按照方法名称来定义,具体的使用方法可以参考官方文档。

配置Spring Boot支持AOP

@Configuration
@EnableAspectJAutoProxy
public class Config {
}

只需要使用@EnableAspectJAutoProxy注解开启Spring Boot的AOP支持即可。

最后,在调用download方法之后就会打印出本次处理的用时。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

Java基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多