欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-02-06 10:06:51|栏目:JAVA代码|点击:

前言

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代码

下一篇:Springboot Thymeleaf字符串对象实例解析

本文标题:在Spring Boot框架中使用AOP的正确姿势

本文地址:http://www.codeinn.net/misctech/58207.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有