前の記事Javaアノテーションの導入では、Javaアノテーションの基本的な使用法について説明し、カスタムアノテーションを通じて簡単なテストツールを実装しています。この記事では、Spring BootのAOPを使用してカスタムアノテーションの処理を簡素化する方法を紹介し、例として簡単なメソッド実行時間統計ツールを実装することにより、これらのコンテンツを説明します。
AOPコンセプト
アスペクト指向プログラミング(AOP、アスペクト指向プログラミング、視点指向プログラミング、およびセクション指向プログラミングとしても翻訳されています)は、コンピューターサイエンスの用語であり、プログラミングパラダイムを指します。このパラダイムは、オブジェクト、クラス、または機能に散らばっている交差カットの懸念を記述するための新しいモジュール式メカニズムであるアスペクトと呼ばれる言語構造に基づいています。
サイドの概念は、オブジェクト指向プログラミングの改善に由来しますが、これに限定されず、従来の機能を改善するためにも使用できます。サイドに関連するプログラミングの概念には、メタオブジェクトプロトコル、被験者、ミキシン、および委任も含まれます。
注:上記の定義は中国のウィキペディアからのものです(アクセスできない場合は、システムのホストファイルを変更してアクセスできます。198.35.26.96ZH.WIKIPEDIA.org #chinese Wikipedia。一般的なファイルパスは /etc /hostsです)。 AOPという言葉の翻訳は、中国の主流の名前とは少し矛盾しています。 AOPの主流の国内翻訳は「対面プログラミング」です。名前に固執しないでください。同じことを指していることを知ってください。
この定義を読んだ後、あなたは混乱していると思います。より深い理解を持ちたい場合は、Zhihuに行って、志向のプログラミングのAOPが何であるかについて、大物がどのように議論するかを見ることができますか? 。ここで例を挙げたほうがいいです。
Spring BootのAOP環境の準備
pom.xmlに対応する依存関係モジュールを導入します
<! - スプリングブート依存関係パッケージ - > <parent> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <バージョン> 1.5.1。 <artifactid> spring-boot-starter-aop </artifactid> </dependency> <! - web依存関係モジュール - > <依存関係> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> <
最初に簡単なWeb要求処理を実装します
Webリクエストを処理するためのシンプルなコントローラー。
パッケージcom.craneyuan.controller; import com.craneyuan.service.healloworldservice; Import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.not.not.bintmapt org.springframework.web.bind.annotation.restcontroller; @restcontrollerpublic class helloworldcontroller {@autowired private ihellowordservice helloworldservice; @RequestMapping(value = "/hello"、method = requestmethod.get)public string hello(string name){return helloworldservice.gethellomessage(name); }}単純なHelloworldサービス実装クラスのコードは表示されません。
パッケージcom.craneyuan.service.impl; import com.craneyuan.annotation.analysisactuator; Import com.craneyuan.service.healloworldservice; import org.springframework.beans.factory.annotation.value; Import org.springframework.Serve.Service; java.util.optional; @servicepublic class helloworldserviceimpl ihelloworldservice {public string gethellomessage(string name){return "hello" + optional.ofnullable( "world!"); }}このようなシンプルなWebサービスの準備はできました。プロジェクトを開始して、たとえばCurl -Xget -I "http://127.0.0.1:8080/hello?name=java"などで呼び出すことができます。すべてがうまくいけば、次のような応答が得られます。
http/1.1 200content-type:text/plain; charset = utf-8content-length:11date:thu、2018年1月11日09:45:38 gmthello java
カスタムアノテーションを使用して、メソッドの実行時間をカウントします
最初に、メソッドの実行時間をカウントするために使用される注釈を定義します。
パッケージcom.craneyuan.annotation; Import java.lang.annotation.elementtype; Import java.lang.annotation.retention; import java.lang.annotation.retentionPolicy; import java.lang.annotation.targett; string note()default "";}
次に、定義したアノテーションを処理するセクションを定義します。
パッケージcom.craneyuan.aspect; import com.craneyuan.annotation.analysisactuator; import org.aspectj.lang.joinpoint; Import org.aspectj.lang.annotation.aspect; import org.aspectj.lang.annotation.before; import org.spectJ.lang.annotation.annotation.pointcut.pointcct.pointcct.pointcct.pointctcm. org.slf4j.loggerfactory; Import org.springframework.core.annotation.order; import org.springframework.streeotype.component;@aspeent@componentpublic class analysisactuatorspect {final static logger log = loggeractory.getLogger(Analysisactuatoraspect.class); threadlocal <long> begintime = new threadlocal <>(); @pointcut( " @annotation(Analysisactuator)")public voidサービス客(Analysisactuator analysionactuator){} @before( "ServiceStatistics(AnalysisActuator)")public void dobefore(Joinpoint JoinPoint、Analysisactuator Analysisactator){//リクエストのリクエスト時間を記録します。 log.info( "cy666 note:{}"、Analysisactuator.note()); } @After( "ServiceStatistics(AnalysisActuator)")public void doafter(analysisactuator analysisactuator){log.info( "cy666統計時間:{}、注:{}"、System.currenttimemillis() - begintime.get }}最後に、実行時間をカウントする必要がある方法に@analysisactuatorアノテーションを追加するだけです。
パッケージcom.craneyuan.service.impl; import com.craneyuan.annotation.analysisactuator; Import com.craneyuan.service.healloworldservice; import org.springframework.beans.factory.annotation.value; Import org.springframework.Serve.Service; java.util.optional; @servicepublic class helloworldserviceimpl ihhelloworldservice {@analysisactuator(note = "get chethellomessage(string name){return" hello " + optional.ofnullable(name).orelse(" world! "); }}プロジェクトを開始し、Curlコマンドでさりげなく呼び出します。うまくいけば、顔に印刷された丸太を観察できます。
... CY666統計時間:4、注:チャット情報を取得する方法
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。