Artículo anterior La introducción de anotaciones de Java explica el uso básico de las anotaciones de Java e implementa una herramienta de prueba simple a través de anotaciones personalizadas; Este artículo introducirá cómo usar el AOP de Spring Boot para simplificar el procesamiento de anotaciones personalizadas, y explicará estos contenidos implementando una herramienta de estadísticas de tiempo de ejecución de métodos simples como ejemplos.
Concepto de AOP
La programación orientada a los aspectos (AOP, también traducida como programación orientada al aspecto, programación orientada a la perspectiva y programación orientada a la sección) es un término en informática, que se refiere a un paradigma de programación. Este paradigma se basa en una construcción de idiomas llamado aspecto, que es un nuevo mecanismo modular para describir las preocupaciones transversales dispersas en objetos, clases o funciones.
El concepto de lado se origina en las mejoras en la programación orientada a objetos, pero no se limita a esto, también se puede utilizar para mejorar las funciones tradicionales. Los conceptos de programación relacionados con el lado también incluyen protocolos meta-objeto, sujetos, mezclas y delegaciones.
Nota: La definición anterior proviene de Wikipedia china (si no puede acceder a ella, puede acceder a él modificando el archivo hosts del sistema. 198.35.26.96 zh.wikipedia.org #Chinese Wikipedia, que solo puede ayudar esto. Si aún no puede acceder a él, busque en línea para buscar cómo modificar el archivo de hosts del sistema. decirle directamente la ruta del archivo general es /etc /hosts). La traducción de la palabra AOP es un poco inconsistente con el nombre principal en China. La traducción doméstica principal de AOP es "programación orientada a la cara". No se adhieran al nombre, solo sepa que se refiere a lo mismo.
Supongo que estás confundido después de leer esta definición. Si quieres tener una comprensión más profunda, puedes ir a Zhihu para ver cómo los grandes discuten sobre cuál es el AOP en la programación orientada. . Será mejor que tome el ejemplo aquí.
Preparación del entorno AOP de Spring Boot
Introducir módulos de dependencia correspondientes en pom.xml
< <artifactID> spring-boot-starter-aop </arfactid> </pendency> <!-Web Dependency Module-> <Spendency> <MoupRupid> org.springframework.boot </groupid> <artifactID> spring-boot-starter-web </artifactid> </pendency> </dependencias>
Implementar primero un procesamiento de solicitud web simple
Un simple controlador para manejar solicitudes web.
paquete com.craneyuan.controller; import com.craneyuan.service.ihelloworldservice; import org.springframework.beans.factory.annotation.auTowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframe.webind.webind.wequatation org.springframework.web.bind.annotation.restcontroller; @restcontrollerpublic class helloworldController {@aUtowired ihelloworldservice helloworldService; @RequestMapping (valor = "/hola", método = requestMethod.get) public String Hello (Nombre de cadena) {return helloworldService.gethellomessage (nombre); }}No mostraré el código para una clase simple de implementación del servicio Helloworld.
paquete com.craneyuan.service.impl; import java.util.optional; @ServicePublic Class HelloWorldServiceImpl implementa iHelloworldService {public String gethellomessage (nombre de cadena) {return "Hello" + Opcional.ofNullable (Name) .orelse ("World!"); }}Un servicio web tan simple está listo. Puede iniciar el proyecto y llamarlo con el comando curl, por ejemplo: curl -xget -i "http://127.0.0.1:8080/hello?name=java". Si todo va bien, obtendrá una respuesta como la siguiente:
Http/1.1 200content-type: text/sencillo; charset = utf-8content-longitud: 11 Date: thu, 11 de enero de 2018 09:45:38 gmthello java
Use anotaciones personalizadas para contar el tiempo de ejecución de un método
Primero defina una anotación utilizada para contar el tiempo de ejecución del método.
paquete com.craneyuan.annotation; import java.lang.annotation.elementType; import java.lang.annotation.retention; import java.lang.annotation.retentionPolicy; import java.lang.annotation.target; @Target (elementtype.method) @retention (retenente.rune); String nota () predeterminado "";}
Luego defina una sección para manejar la anotación que acaba de definir.
paquete com.craneyuan.spect; import com.craneyuan.annotation.analysisActuator; import org.aspectj.lang.joinpoint; import org.aspectj.lang.annotation.aspect; import og.aspectj.lang.annotation.befefe; import org.slf4j.loggerFactory; import org.springframework.core.annotation.order; import org.springframework.stereotype.component;@aspect@componentPublic AnalysisAnselySpect {Logger Static Logger final = loggerFactory.getLogger (análisis de evaluaciones@componente AnalysissAntyAspect {Logger final de Logger = loggerFactory.getLogger (análisis de análisis@componente de análisis de análisis); ThreadLocal <Long> BegInTime = new ThreadLocal <> (); @PointCut (" @annotation (AnalysisActuator)") public void ServiceStatistics (AnalysisSActUator AnalysisActuator) {} @BeFore ("ServiceStatistics (AnalysisActuator)") public void DoBeFore (unión de unión de unión, AnalysisActUator ACTUALATOR) {// Registre el tiempo de llegada del tiempo. log.info ("Cy666 Nota: {}", AnalysisActuator.note ()); } @After ("ServiceStatistics (AnalysisActuator)") public void doafter (AnalysisActUator AnalysisActuator) {log.info ("Cy666 Statistical Time: {}, nota: {}", System.CurrentTimemillis () - BreadInTime.get (), AnalysaCuator.note ()); }}Finalmente, simplemente agregue la anotación @analysisActuator al método que necesita contar el tiempo de ejecución.
paquete com.craneyuan.service.impl; import java.util.optional; @ServicePublic Class HelloWorldServiceImpl implementa iHelloworldService {@AnalySaCuator (nota = "Obtener método de información de chat") Cadena pública gethellomessage (name de cadena) {return "Hello" + Oppectional. }}Inicie el proyecto y llámelo casualmente con el comando CURL. Si va bien, puede observar el registro impreso en la cara.
... CY666 Tiempo estadístico: 4, Nota: Método para obtener información de chat
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.