Artigo anterior A introdução das anotações Java explica o uso básico das anotações Java e implementa uma ferramenta de teste simples por meio de anotações personalizadas; Este artigo introduzirá como usar a AOP da Spring Boot para simplificar o processamento de anotações personalizadas e explicará esses conteúdos implementando uma ferramenta simples de estatística de tempo de execução de métodos como exemplos.
Conceito de AOP
A programação orientada a aspectos (AOP, também traduzida como programação orientada a aspectos, programação orientada à perspectiva e programação orientada para a seção) é um termo na ciência da computação, referindo-se a um paradigma de programação. Esse paradigma é baseado em uma construção de idiomas chamada aspecto, que é um novo mecanismo modular para descrever preocupações transversais espalhadas em objetos, classes ou funções.
O conceito de lado se origina de melhorias na programação orientada a objetos, mas não se limita a isso, também pode ser usado para melhorar as funções tradicionais. Os conceitos de programação relacionados ao lado também incluem protocolos de meta-objeto, sujeitos, mixins e delegações.
A definição acima vem da Wikipedia chinesa (se você não puder acessá -la, poderá acessá -la modificando o arquivo hosts do sistema. 198.35.26.96 zh.wikipedia.org #Chinese Wikipedia, se você pode, se você não pode acessar o Systems. Diga diretamente. A tradução da palavra AOP é um pouco inconsistente com o nome mainstream na China. A tradução doméstica convencional da AOP é "programação orientada para o rosto". Não fique com o nome, apenas saiba que se refere à mesma coisa.
Eu acho que você está confuso depois de ler esta definição. Se você quiser ter um entendimento mais profundo, pode ir a Zhihu para ver como os grandes caras discutem sobre o que é a AOP na programação orientada? . É melhor eu dar o exemplo aqui.
Preparação de ambiente AOP de bota de primavera
Introduzir módulos de dependência correspondentes em pom.xml
<!-pacote de dependência da inicialização da primavera-> <air> <roupidId> org.springframework.boot </groupiD> <stifactId> spring-boot-starter-parent </artifactId> <versão> 1.5.1. </ArtifactId> Spring-Boot-Starter-AOP </ArtifactId> </Dependency> <!-Módulo de Dependência da Web-> <pendency> <purboundid> org.springframework.boot </groupid> </dependência> Spring-Boot-Starter-Web </stifactid> </dependência> </dependências>
Implementar um processamento simples de solicitação da web primeiro
Um controlador simples para lidar com solicitações da Web.
pacote com.craneyuan.controller; importação com.craneyuan.service.ihelloworldservice; importar org.springframework.beanS.factory.annotation.autowired; importação org.springframework.web.bind.annotation.requestMapping; importar; org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloWorldController { @Autowired private IHelloWorldService helloWorldService; @RequestMapping (value = "/hello", método = requestMethod.get) public string hello (nome da string) {return helloworldservice.gethellomessage (nome); }}Não mostrarei o código para uma classe simples de implementação de serviços Helloworld.
pacote com.craneyuan.service.impl; importar com.craneyuan.annotation.analysisactuator; importar com.craneyuan.service.ihelloworldservice; importação org.springframework.beans.factory.annotation.value; importação; Java.util.Optional; @ServicePublic Classe HelloworldServiceImpl implementa IhelloworldService {public String Gethellomessage (Nome da String) {return "Hello" + Optional.ofnullable (Nome) .orelse ("World!"); }}Um serviço web tão simples está pronto. Você pode iniciar o projeto e chamá -lo com o comando curl, por exemplo: curl -xget -i "http://127.0.0.1:8080/hello?name=java". Se tudo correr bem, você receberá uma resposta como a seguinte:
HTTP/1.1 200CONTENT-TYPE: Text/Plain; Charset = UTF-8Content-Length: 11Date: qui, 11 de janeiro de 2018 09:45:38 GMTHELLO Java
Use anotações personalizadas para contar o tempo de execução de um método
Primeiro, defina uma anotação usada para contar o tempo de execução do método.
pacote com.craneyuan.annotation; importar java.lang.annotation.ElementType; importar java.lang.annotation.retEntion; importar java.lang.annotation.retEntionPolicy; import java.lang.annotation.target; @Target (elementTypeR.Method) String Note () padrão "";}
Em seguida, defina uma seção para lidar com a anotação que você acabou de definir.
pacote com.craneyuan.aspect; importar com.craneyuan.annotation.analysisactuator; importar org.aspectj.lang.joinpoint; importar org.aspectj.lang.annotation.aspectj.Anng.lanTation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation.annotation. org.slf4j.loggerFactory; importar org.springframework.core.annotation.order; importar org.springframework.tereotype.component;@aspecto@componentpublic class AnalysisActuatoraspect.Cl) LOGGER STATIC = LoggerFactory.GetLogger (análise de análise (análise de análise; Threadlocal <long> BEGINTIME = new Threadlocal <> (); @Pointcut (" @anotação (análise)") public void servicestatistics (análise de análise de análise) {} @Before ("servicestatistics (analysalAtTuator)") public void dopefore (junção de junção, syningpoint, análise de análise (systemctuator) {// registra o tempo de solicitação travative.ettime.EnginEt.EnginSet.InStime.Estem.Estration.Estem.EstrinEn.ent.Estration.Estem.EstrinEn (syning. SynoTent.InginEn.ent.Estem.EstrinEr (system.entCentUator) (// Recorde o tempo de preensão previsto. log.info ("cy666 Nota: {}", análise de análise.note ()); } @After ("Servicestatistics (AnalysisActuator)") public void Doafter (AnalysisActuator AnalysisActuator) {Log.info ("Cy666 Time estatístico: {}, note: {}", System.CurrentTimEmillis () - beginTime.get.get (), análise "",); }}Por fim, basta adicionar a anotação @AlysisActuator ao método que precisa contar o tempo de execução.
pacote com.craneyuan.service.impl; importar com.craneyuan.annotation.analysisactuator; importar com.craneyuan.service.ihelloworldservice; importação org.springframework.beans.factory.annotation.value; importação; Java.util.OptionCal; @ServicePublic Classe HelloworldServiceImpl implementa IHelloworldService {@AnalysisActuator (note = "Obter método de informação de bate -papo") public string gethellomessage (nome da string) {return "hello" + opcional.ofnullable (Name) .orelse ("World"; }}Inicie o projeto e chame -o casualmente com o comando curl. Se der certo, você poderá observar o tronco impresso na face.
... CY666 Tempo estatístico: 4, nota: Método para obter informações de bate -papo
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.