SpringBootをいえば、必然的に春を考えるでしょう。
春のために、私はそれで多くの大規模および小規模なプロジェクトに取り組んできました。
SpringBootを使用する場合は、古代のことわざで、最も直感的な感じを与える:「ジェーンへの道」
春と比較SpringBoot、それは利点を有するか、または春の欠点は、より実際小さいです。
(1)組み込みのTomcat、Jettyは、その他のコンテナの中に、必要とすることなく、Tomcatは(数分かかりますTomcatの光を開始し、それは巨大な開発プロジェクトのことを思い出す)まで直接実行することができます。
(2)あなたはドッカーコンテナの展開を管理する形態であることができ、展開のしやすさ、実行可能Jarファイルは、サーバー上で実行することが許さ持続コマンドnohubも使用することができます。
(3)初期接触春は、それが最も直感的な感じを与えるとき重いXML設定の多くを管理する必要は(覚えていないオブジェクトは実際には、いない限り、前のように、対応するXMLに設定され、管理SPRINGするということです彼の20大丈夫新しい、新しいダース自身が、実際のプロジェクトのように、オブジェクトが大きすぎる、とオブジェクトを管理するための伝統的な新しい方法に従うならば、それはないだけでなく、それに時間とエネルギーの多くを取るだろうなぜならなどのオブジェクトの初期化と破壊を、考慮する必要の事業開発、)上の濃縮物が、私はSpringBoot将来のプロジェクト、基本的にSpringBootうまく統合されたサードパーティ製のライブラリを使用する場合、何が必要であることは、直接application.ymlまたはapplication.propertiesです直接設定することができます。
スターター・ウェブ(4)単純化Mavenの構成を提供します(一般的に、共通のjarファイルに統合され、いくつかのウェブと同等の統合、我々はまた、輸入版の互換性の問題を検討する必要がある1つの州ずつ頼ります)。
依存スプリング・ブート・スターター・ウェブから転送することが可能と見ることができます。
(5)(マイクロサービスの開発のためのより良い適した)別個Springアプリケーションを作成します。
SpringAOPアプリケーションシナリオ
2つの典型的な例の概要については、実際の開発から出発して
、(1)制御やアクセス制御にアクセスするためのインターフェースとして使用することができる
(2)インターフェイスインターフェイス統計情報要求と要求の数を検出するために使用することができます。
あなたが実際に非常に少ないから掘ることができますか?
(1)伐採;
(2)パフォーマンス統計;
(3)安全管理を(アクセス制御として理解することができる);
(4)取引;
(5)例外処理。
私はこれらの5つの分野のためのすべてのJava開発者を考え、その後、十分に理解しています。
例えば、インタフェース要求を聞くこと
コアのコードは次の通りであります:
パッケージcom.blog.springboot.aop。 輸入java.util.HashMapを; 輸入java.util.Map; 輸入org.aspectj.lang.ProceedingJoinPoint。 輸入org.aspectj.lang.annotation.Around; 輸入org.aspectj.lang.annotation.Aspect; 輸入org.aspectj.lang.annotation.Pointcut; 輸入org.springframework.stereotype.Component。 輸入cn.hutool.core.lang.Console; / ** *系统日志类(用于统计接口请求) * @author youcong * @date 2019年9月5日 * / @Aspect @Component パブリック クラスSystemLogAspect { @Pointcut( "実行(公共com.blog.springboot.controller .. * * *(..))"。 ) 公共 無効ポイントカット(){ はconsole.log( "あなたが行く" ); } // @Around:サラウンド通知 @Around( "ポイントカット()" ) 公共アラウンドオブジェクト(ProceedingJoinPoint PJP)がスローされたThrowable { 地図 <文字列、オブジェクト> =データの新しい新しいのHashMap <>を(); //は、ターゲットクラスの名前を取得します clazzName =文字列pjp.getTarget()を。 getClass()のgetName();. // ターゲットクラスメソッドの名前を取得する 文字列methodNameの= )(pjp.getSignature()のgetNameを; // レコードクラス名 data.put( "clazzName" 、clazzName); // 対応するメソッドの名前を記録 data.put( "methodNameの" ;、methodNameの) // レコード要求パラメータ data.put( "paramsは" (、pjp.getArgsを)); // 時間呼び出しを開始 // タイミングと呼ばれる機能 ロングスタート= にSystem.currentTimeMillisを(); 検索結果をオブジェクト = pjp.proceed(); 長い時間 =にSystem.currentTimeMillis() - 開始; // レコードは、パラメータ返された データを.put( "結果" 、結果); //がかかる合計時間を設定し data.put( "consumeTimeを"、時間); System.out.println(データ)。 戻り値の結果; } }
取得された出力に対応するインターフェイス情報に実質的にすべての要求インタフェース。
ここで背景がインタフェース要求の数をカウントする必要がある場合は、非常に頻繁にいくつかのインタフェース要求に対して、キャッシュを追加することを検討したり、他の最適化を実行します。
一般的なコメントのSpringAOP
次のように簡単にはAOP、AOPとも呼ばれるアスペクト指向プログラミングについて、それが一般的に使用される用語は、次のとおりです。
接続点(ジョインポイント)
プログラムの実行中に特定の点を高める(その場所での動作を向上させるために行われます)。ばねは唯一の接続点の方法を支持し、両方の方法は、唯一のメソッド呼び出しの後に呼び出すことができる前に、この方法は、ときに、プログラムの実行ポイント例外をスローし、そう向上に織り込ま。
タンジェントポイント(ポイントカット)
タンジェントポイントは、添付ファイルの収集ポイントです。AOP「接点」によって特定の接続ポイントを標的とします。接点とデータベースクエリの概念を介した接続点との間の関係を理解しますが、右クリック来るには:カットオフポイントは、クエリに相当しながら、接続ポイントは、データベース内のレコードに相当します。
強化された(助言)
ターゲット増強は、コード・ポイントが接続されている番組のカテゴリに織り込まれています。これは、接続ポイントで実行する操作を示します。
セクション(アスペクト)
接点と補強部によって結合点の定義を含む、両方の横方向ロジックの定義を含む、組成物(導入)(カット点複数の補強複数を含んでいてもよい)、SpringAOP部が切断されますフレームワークを実装するための責任を負います定義された横方向ロジック部は、指定されたリンクポイントに織り込ま。
次のように一般的SpringAOP注釈付き:
@Aspect(セクションで定義)
@Pointcut(定義されたカットポイント)
@Before(位置規定された方法をタグ付け情報前)が
(定義情報である復帰後のタグ付け)@AfterReturning
@AfterThrowing(定義は、情報を投げた後に示されます方法)
この方法は、情報を定義@After(最後に(後に示す))
@Around(メソッドが定義された周辺情報で示されます)