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

网友投稿 398 2023-01-23


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

前言

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注解,这是一lVeeApYTW个自定义的普通注解,用来标记这个方法作为一个切点。

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 = SyslVeeApYTWtem.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方法之后就会打印出本次处理的用时。

总http://结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:云端共享文件系统(云端共享文件夹)
下一篇:信号接口自动化测试(信号接口自动化测试工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~