详解使用弹簧引导的AOP处理自定义注解

  

上一篇文章Java注解介绍讲解了Java注下解的基本使用方式,并且通过自定义注解实现了一个简单的测试工具;本篇文章将介绍如何使用Spring的AOP来引导简化处理自定义注解,并将通过实现一个简单的方法执行时间统计工具为样例来讲解这些内容。

  

<强> AOP概念

  

面向侧面的程序设计(面向方面的编程(AOP,又译作面向方面的程序设计,观点导向编程,剖面导向程序设计)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(方面,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象,类或函数中的横切关注点(横切关注点)。

  

侧面的概念源于对面向对象的程序设计的改进,但并不只限于此,它还可以用来改进传统的函数。与侧面相关的编程概念还包括元对象协议,主题(主题),混入(混合)和委托。

  

注释:以上定义源自中文维基百科(如果访问不了,可以通过修改系统的主机文件访问,198.35.26.96 zh.wikipedia.org中文维基百科,只能帮到这了,如果还是上不了,那就麻烦上网搜索下怎么修改系统的主机文件,不同系统下主机文件位置不一样,如果是Linux或Mac者系统,我就直接告诉你吧,一般文件路径是/etc/hosts), AOP这个词的翻译有点和国内主流叫法不一致,国内主流都把AOP译做“面向切面编程”,大家不要拘泥于叫法,知道指的是同一个东西即可。

  

估计,你看了这个定义也是懵的,如果想深入了解可以去知乎看看大佬们是如何掰扯的什么是面向切面编程AOP ?。我这边还是就直接上例子了吧。

  

<>强弹簧引导的AOP环境准备

  

在pom。xml中引入相应的依赖模块

        & lt; !——春天引导依赖包——比;   & lt; parent>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-parent   & lt; version> 1.5.1.RELEASE   & lt;/parent>   & lt; dependencies>   & lt; !——AOP依赖模块——比;   & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-aop   & lt;/dependency>   & lt; !——Web依赖模块——比;   & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-web   & lt;/dependency>   & lt;/dependencies>   之前      

先实现一个简单的网页请求处理

  

一个简单的处理Web请求的控制器。

        包com.craneyuan.controller;      进口com.craneyuan.service.IHelloWorldService;   进口org.springframework.beans.factory.annotation.Autowired;   进口org.springframework.web.bind.annotation.RequestMapping;   进口org.springframework.web.bind.annotation.RequestMethod;   进口org.springframework.web.bind.annotation.RestController;      @RestController   公开课HelloWorldController {   @ autowired   私人IHelloWorldService helloWorldService;      @RequestMapping (value=" https://www.yisu.com/hello ",方法=RequestMethod.GET)   你好公共字符串(字符串名称){   返回helloWorldService.getHelloMessage(名称);   }   }      之前      

一个简单的HelloWorld服务实现类,接口的定义我就不展示代码了。

        包com.craneyuan.service.impl;      进口com.craneyuan.annotation.AnalysisActuator;   进口com.craneyuan.service.IHelloWorldService;   进口org.springframework.beans.factory.annotation.Value;   进口org.springframework.stereotype.Service;      进口java.util.Optional;      @ service   公共类HelloWorldServiceImpl实现IHelloWorldService {      公共getHelloMessage字符串(字符串名称){   返回“Hello”+ Optional.ofNullable(名字).orElse(“世界!”);   }      }   之前      

这样一个简单的Web服务就弄好了,你可以启动项目用curl命令调用试下,例如:curl xget我“http://127.0.0.1:8080你好# 63;name=Java”,如果一切顺利的话,你将会得到类似下面这样的响应:

        HTTP/1.1 200   内容类型:文本/平原;charset=utf - 8   内容长度:11   日期:2018年1月11日,星期四09:45:38格林尼治时间      你好Java   之前      

使用自定义注解来统计方法的执行时间

  

先定义一个用来统计方法执行时间的注解。

详解使用弹簧引导的AOP处理自定义注解