SpringBoot ❤ SpringClould共通アノテーションエピックまとめ
アノテーションとは何ですか?
Javaアノテーションは、いくつかのツールがコンパイル時や実行時に解析して使用するためにコードに付加されるメタ情報であり、説明や設定として機能する。
アノテーションは基本的にアノテーションインターフェイスを継承し、リフレクションによってアノテーションの情報を取得し、論理的な操作を行うことができる。
@Controller, @RestController, @Service, @Autowire
などがあります。
I. SpringBootアノテーション
1.1.@SpringBootApplication
内容
@Configuration, @EnableAutoConfiguration, @ComponentScan
通常、メインクラスで使用します。
1.2.@リポジトリ
データアクセスコンポーネント、すなわちDAOコンポーネントをマークアップするために使用されます。
1.3.@ サービス
ビジネス層コンポーネントをマークアップするために使用します。
1.4.@RestController
コントロールレイヤーコンポーネント(Strutsのアクションなど)をマークアップするために使用され、以下を含みます。
@Controller
と
@ResponseBody
.
1.5.@ResponseBody
メソッドの戻り値が直接HTTPレスポンスボディに書き込まれることを示す
は一般に、非同期でデータを取得するとき、あるいは
@RequestMapping
を使用した後、戻り値は通常ジャンプパスに解決されます。
@responsebody
戻り値はジャンプパスとしてパースされず、直接HTTPレスポンスボディに書き込まれます。例えば、jsonデータを非同期で取得するには、以下のように
@responsebody
は、jsonデータを直接返します。
1.6.@コンポーネント
コンポーネントを一般化し、コンポーネントがうまく分類されない場合にこのアノテーションを使ってマークアップすることができます。
1.7.@ComponentScan
コンポーネントスキャン。個人的にはcontext:component-scanと同等と理解しており、スキャンで@Component @Controller @Serviceといったアノテーションを持つクラスが見つかったら、それらのクラスをBeanとして登録します。
1.8. コンフィギュレーション
このクラスが,XMLに相当するビーン構成の情報源であることを示し,通常,主クラスに追加される。
1.9.@Bean
クラスではなくメソッドの上に置かれたXMLに相当するものは、ビーンを生成し、それを管理するためにスプリングに与えることを意味します。
1.10.@EnableAutoConfiguration
アプリケーションによって宣言された依存関係(通常はメインクラスに追加される)に基づいて、Spring BootがSpringフレームワークを自動構成できるようにします。
1.11.@AutoWired
byTypeのアプローチ。構成されたBeanを取り出し、それを使ってプロパティとメソッドのアセンブリを完成させる。クラスのメンバ変数、メソッド、コンストラクタにアノテーションを付け、自動アセンブリの仕事を完了させることができます。
required=false)を追加した場合、Beanが見つからなくてもエラーにならない。
1.12.@Qualifier
同じ種類のBeanが複数ある場合、@Qualifier("name")で指定することが可能です。Autowiredと組み合わせて使用します。
1.13.@Resource(name="name",type="type")
括弧内の内容がない場合、byNameをデフォルトとする。
@Autowired
も似たようなことをします。
1.14.@RequestMapping
RequestMapping は、リクエストアドレスのマッピングを処理するためのアノテーションで、クラスまたはメソッドに使用することができます。クラスで使用すると、リクエストに応答するクラス内のすべてのメソッドが、 そのアドレスを親パスとして持っていることを示します。
このアノテーションには6つの属性があります。
params:メソッドが処理するために、リクエストが特定のパラメータ値を含んでいる必要があることを指定します。
headers:メソッドがリクエストを処理するために、リクエストが特定のヘッダー値を含んでいる必要があることを指定します。
value:リクエストの実際のアドレスを指定します。指定されたアドレスは、URIテンプレートパターン
method:リクエストのメソッドタイプを指定します。GET, POST, PUT, DELETEなど。
consumes:リクエストを処理するための送信タイプ(Content-Type)を指定します(application/json,text/htmlなど)。
produces:リクエストヘッダの(Accept)タイプに指定されたタイプが含まれている場合のみ、返すコンテンツのタイプを指定します。
戻り値
1.15.@RequestParam
メソッドのパラメータの前で使用します。
@RequestParam String a = request.getParameter("a")
1.16.@PathVariable
パス変数です。パラメータは中括弧の中の名前と同じでなければならない。
RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
//do something;
}
1.17.@Profiles
Springプロファイルは、アプリケーションの設定を分離し、特定のコンテキストでのみ利用できるようにする方法を提供します。
任意の@Componentや@Configurationに@Profileのタグを付けることで、読み込みのタイミングを限定することができます。
@Configuration
@Profile("prod")
public class ProductionConfiguration {
// ...
}
1.18.@ConfigurationProperties
Spring Bootは、デフォルトでJSR-303を使用して、外部設定の検証を試みます(クラスパスのパスにある場合)。
で@ConfigurationPropertiesクラスにJSR-303 javax.validation制約アノテーションを簡単に追加することができます。
@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
@NotNull
private InetAddress remoteAddress;
// ... getters and setters
}
グローバルな例外処理
1.19.@ControllerAdvice
Componentを含む。スキャン可能。
例外処理を統一する。
1.20.@ExceptionHandler (Exception.class)
メソッドの上で、この例外が発生したときに次のメソッドが実行されることを示すために使用します。
SpringBootのタイマー、キャッシュ、Jpa、トランザクションアノテーションについては、大御所によるこちらの記事をご覧ください。 SpringBootアノテーション
II. スプリングクラウド
2.1. 概要
内部に複数の接続を持つ @Controller 制御層
Qualifier インターフェースに複数の実装がある場合、一意のマーカーを付けてインジェクトします。
Autowiredと同じ機能で@Resourceビーンが注入されます。
説明
共通点 Resourceと@Autowiredはどちらも注入された属性の修飾子として使用することができます。インターフェイスに実装クラスが1つしかない場合、どちらのアノテーションも同じ修飾効果を持ち、使い方に影響を与えることなく代用することができます。
相違点
ResourceはJava独自のアノテーションで、@Resourceにはnameとtypeに分かれた2つの属性があり、Springは@Resourceアノテーションのname属性をBeanの名前に、type属性をBeanのタイプに解決しています。つまり、name属性を使用する場合はbyName自動注入ポリシーを使用し、type属性を使用する場合はbyType自動注入ポリシーを使用します。name属性もtype属性も指定されていない場合は、リフレクション機構を通じてbyName自動注入ポリシーが使用されます。
Spring 2.5 で導入された @Autowired アノテーションは、型に基づいてのみ注入され、名前にはマッチしません。
他のコンポーネント(外部サービスにアクセスするコンポーネントなど)を定義する @Component
ModelAttribute は一般的にコントローラ層で使用され、so マッピングが実行される前に chant アノテーションされたメソッドが実行され、モデルモデルに対してパラメータをバインドすることが可能です。
トランザクション (readOnly=true)アノテートトランザクション
TransactionalEventListener は、トランザクションがコミットする前、コミットした後、完了した後、およびロールバックした後という複数の段階でコールバック イベントを受け入れることができるトランザクションのコールバック メソッドを設定するために使用されます。
値 ("${}") は、プロパティ内の設定項目を注入することができます。
@InitBinder は一般にコントローラで使用され、フォームから渡されるすべての文字列をエンコードして xss 攻撃を防ぐために、例えば文字列の日付を日付型に変換するために使用されます。
EnableCachingアノテーションは、適切なキャッシュ・マネージャの設定を自動化します。
EnableWebSecurity アノテーションは、春のセキュリティをオンにし、websercrityconfigureadapter を統合します。
SringBootApplicationに相当する@configuration、@EnableAutoConfiguation、@ComponentScanアノテーションを併用することで、@SringBootApplicationを使用することができます。
EnableDiscoveryclient は、アプリケーションを Eureka クライアントアプリケーションとして登録し、サービスディスカバリ機能を取得します。
EnableAdminServer 管理者を使用してアプリケーションを監視します。
EnableEurekaClientは、このアプリケーションがサービス登録とサービス発見を使用するように設定します。
EnableEurekaServerは、サービスレジストリを起動します。
EnableHystrix は、サービスの登録と検出に依存するサーキットブレーカーを開始することを示します。
HystrixCommandアノテーションメソッドに失敗した場合、システムはWest EastをfallbackMethodメソッドに切り替えて実行します。フォールバックメソッドの指定
@Comfiguration 従来のxml設定ファイルに相当します。
@Import 他の設定クラスをインポートする
xml設定ファイルを読み込むために@ImportResourceを使用します。
FeignClientアノテーションのfallbank属性で、コールバッククラスを指定します。
RestController は json 文字列データを返すので、RESTFul インターフェイスに直接書き込むことができます。
@CrossOrigin はクロスドメインリクエストを処理できるため、ドメイン内にないファイルにアクセスすることができます。
ApiOperation まず、@ApOperationアノテーションはSpringに付属しているものではなく、swaggerのアノテーションです @ApOperationはApiドキュメントを構築するために使用します @ApiOperation(value = "interface description" , httpMethod = "interface request method" , response = "interface return parameter type" , notes = "interface release notes".AiOperation は、Apiドキュメントを構築するためのもので、Springに付属しているものではない(quot)です。
コードで構成を動的に更新する必要がある場合は、それが必要なクラスにこのアノテーションを追加するだけです。しかし、複雑なインジェクションのシナリオでは、このアノテーションを適切に使用しないと、設定が動的に更新されないことがあります。
Springbootは@FeignClientで外部インターフェースを呼び出します。インターフェースを宣言した後、@Resourceでコードにインジェクションすると、そのインターフェースを使用できます。FeignClientタグの共通属性は以下の通り:name:FeignClientの名前を指定し、プロジェクトがRibbonを使用している場合はname属性がサービス発見用のマイクロサービスの名前として使用されます。
url: urlは一般的にデバッグに使用され、手動で@FeignClientの呼び出しのアドレスを指定できます decode404: http 404エラーが発生したとき、このフィールドが真であればデコーダが呼び出されてデコードし、それ以外の場合はFeignExceptionがスローされます。
コンフィギュレーションを使用します。Feignの設定クラスで、Feign Encoder, Decoder, LogLevel, Contractfallbackをカスタマイズすることができる。リモートインターフェイスの呼び出しが失敗またはタイムアウトした場合に、対応するインターフェイスのエラートレラントロジックを呼び出す、fallbackで指定するクラスは@ FeignClientマーク付きインターフェイスを実装する必要がある、エラートレラント処理クラスを定義する
fallbackFactory: フォールバッククラスのサンプルを生成するためのファクトリークラス。このプロパティを通じて、各インターフェースに共通するフォールトトレラントロジックを実装し、反復的なコードパスを削減することが可能です。現在の FeignClient の統一プレフィックスを定義します。
Spring Cloud の Feign サポートを有効にします。
サーキットブレーカー機能を有効にします。
クライアント側のロードバランシングを有効にします。
WebAppConfiguration Web アプリケーションが ServletContext をエミュレートするための設定を可能にします。
RibbonClientは、ロードバランシングクライアントのカスタム設定を行うために使用されます。
III. ロンボク島共通注釈
3.1. 概要
クラスに対する @Data アノテーション; equals、canEqual、hashCode、toString メソッドに加え、クラスのすべてのプロパティの取得および設定メソッドを提供します。
Setter: プロパティにアノテーションされ、そのプロパティの設定メソッドを提供します。
Setter: プロパティにアノテーションされ、そのプロパティの取得メソッドを提供します。
log4j:クラスのアノテーション; logプロパティでクラスのlog4jログオブジェクトを提供します。
NoArgsConstructor: クラスにアノテーションされ、クラスのパラメータなしコンストラクタを提供します。
AllArgsConstructor: クラスにアノテーションされ、クラスの全パラメータコンストラクタを提供します。
クリーンアップ : ストリームを閉じることができる
Builder : コンストラクタのパターンを持つアノテーションされたクラス
Synchronized : 同期ロックの追加
@SneakyThrows : 例外をキャッチする try/catch に相当するもの
@NonNull : このアノテーションをパラメータに追加すると、NULLパラメータはNULLポインタ例外をスローします。
Value : アノテーションは @Data と似ていますが、デフォルトですべてのメンバー変数を private final として定義し、set メソッドを生成しない点が異なります。
詳しくは、以下のドキュメントをご参照ください。
公式のドキュメントです。
https://projectlombok.org/features/all
lombokアノテーションの紹介です。
http://blog.csdn.net/sunsfan/article/details/53542374
Lombokの紹介と使い方。
http://www.cnblogs.com/holten/p/5729226.html
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
Javaクラスローダーにソースコードから潜り込む
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
「リソースリーク:'scanner'が閉じない」警告、Scannerステートメントでの解決法
-
JAVA のエラーです。公開型***は、独自のファイルで定義する必要があります***。
-
Java面接のポイント3--例外処理(Exception Handling)
-
Java文字列プレースホルダー使用
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Exceptionが発生しました エラー解決
-
をインスタンス化することができません。
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
このラインで複数のマーカーを解決する方法
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
response.sendRedirectによる不具合とその対処法
-
dao インターフェースがメソッドを定義し、エラーを報告した。 xxx 型のメソッド xxx は未定義である。
-
比較方式がその一般契約に違反している。