在Spring Boot框架中使用AOP

做者简介java

彬哥,目前任职于饿了么,从事饿了么物流侧核心系统的开发工做,喜好钻研各类技术,用技术解决实际问题。app

Spring Boot是基于Spring的用来开发Web应用的框架,功能与Spring MVC有点相似,可是Spring Boot的一大特色就是须要的配置很是少。Spring Boot推荐convention over configuration,也就是约定大于配置,所以Spring Boot会帮你作许多自动的配置,而且Spring Boot使用的是Java Config,几乎能够作到零XML文件配置。框架

假设如今有这样一种场景,须要统计某个接口的处理耗时,咱们可使用AOP来实现,在Spring Boot中使用AOP也很是简单,只须要一点简单的配置便可。spa

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

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);
    }
}
复制代码

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

配置Spring Boot支持AOP

@Configuration
@EnableAspectJAutoProxy
public class Config {
}
复制代码

只须要使用@EnableAspectJAutoProxy注解开启Spring Boot的AOP支持便可。接口

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




阅读博客还不过瘾?开发

欢迎你们扫二维码加入交流群,讨论和博客有关的技术问题,还能够和博主有更多互动 文档

博客转载、线下活动及合做等问题请邮件至 shadowfly_zyl@hotmail.com 进行沟通
相关文章
相关标签/搜索