SpringBootと統合コンポーネントのアノテーションの詳細解説(1) - lomback && JPA

1. よく使用される注釈

1、@SpringbootApplication

ComponentScan@ 、 @ SpringBootConfiguration、 @を含む複合アノテーションですEnableAutoConfiguration

  • @SpringBootConfigurationから継承され@Configuration、2 つの機能も同じです。現在のクラスは構成クラスとしてマークされ、現在のクラスで宣言されたアノテーションでマークされたメソッドの 1 つ以上のインスタンスがコンテナー@Beanに含まれsrping、インスタンス名がメソッド名になります。
  • @EnableAutoConfigurationこの機能は、自動構成を開始することです。これは、Springboot追加した jar パッケージに従ってプロジェクトのデフォルト構成を構成することを意味し、たとえば、プロジェクトを追加する必要があるかどうかspring-boot-starter-web を判断し、Web プロジェクトに必要なデフォルト構成を自動的に構成するのに役立ちます。webmvctomcat
  • @ComponentScan、現在のパッケージとそのサブパッケージの下にある@Component、 、@Controller@Service@Repositoryアノテーションでマークされたクラスをスキャンし、管理のために Spring コンテナーに取り込みます。は以前です<context:component-scan>(以前は xml で使用されていたタグで、パッケージ構成の並行サポートをスキャンするために使用されていました)。

 

2、@設定 

Spring 3.0 以降、@Configuration は、xml 構成ファイルを置き換えることができる構成クラスの定義に使用されます。アノテーション付きクラスには、@Bean によってアノテーションが付けられた 1 つ以上のメソッドが含まれています。これらのメソッドは、AnnotationConfigApplicationContext クラスまたは AnnotationConfigWebApplicationContext クラスによってスキャンされ、Bean 定義の構築と Spring コンテナの初期化に使用されます。

構成クラスのメモ:

 

 3、@RestController

これは @Controller と @ResponseBody のコレクションであり、これがコントローラー Bean であることを示し、関数の戻り値は REST スタイルのコントローラーである HTTP 応答本文に直接入力されます。 

4. @Autowired と @Resource

1) @Autowired と @Resource はどちらも Bean のアセンブルに使用でき、どちらもフィールドまたはセッター メソッドに書き込むことができます。

2) @Autowired はデフォルトでタイプによってアセンブルされます (このアノテーションは業界のスプリングに属します)。デフォルトでは、依存オブジェクトが存在する必要があります。NULL 値を許可したい場合は、その required 属性を false に設定できます (例: @Autowired(required=false)。名前アセンブリを使用したい場合は、@Qualifier アノテーションと組み合わせて使用​​できます)

3) @Resource (このアノテーションは J2EE に属します)、デフォルトは名前に従ってアセンブルされ、名前は name 属性によって指定できます。name 属性が指定されていない場合、アノテーションがフィールドに書き込まれると、デフォルトのフィールド名が名前に従って検索されます。アノテーションが setter メソッドに記述されている場合、デフォルトの属性名がアセンブルに使用されます 
名前に一致する Bean が見つからない場合、ワイヤリングはタイプごとに行われます。ただし、name 属性が指定されている場合は、名前に従ってのみアセンブルされることに注意してください。

5、@PathVariable

プレースホルダーを含む URL は Spring 3.0 の新機能です。この機能は、REST 目標に向けた SpringMVC の開発におけるマイルストーンです。@PathVariable を通じて、URL 内のプレースホルダー パラメーターをコントローラー処理メソッドの入力パラメーターにバインドできます。URL 内の {xxx} プレースホルダーは、@PathVariable("xxx") を通じて操作メソッドの入力パラメーターにバインドできます。

6、@JsonBackReference、@JsonManagingReference、@JsonIgnore

1) 2 つのアノテーション @JsonBackReference と @JsonManagedReference は通常、親子関係でペアで使用されます。@JsonBackReference でマークされた属性は、シリアル化 (シリアル化、つまりオブジェクトを json データに変換する) 中に無視されます (つまり、結果の json データには属性のコンテンツが含まれません)。

2) @JsonManagedReference でマークされたプロパティはシリアル化されます。シリアル化する場合、@JsonBackReference は @JsonIgnore と同等であり、この時点では @JsonManagingReference を省略できます。ただし、逆シリアル化 (逆シリアル化、つまり json データがオブジェクトに変換される) では、@JsonManagingReference が存在しない場合、@JsonBackReference でマークされたプロパティ (無視される親または子) は自動的に挿入されません。@JsonManagingReference が存在する場合、@JsonBackReference でマークされたプロパティは自動的に挿入されます。  

3) @JsonIgnore は、無限再帰を中断するためにプロパティを直接無視し、シリアル化と逆シリアル化の両方が無視されます。もちろん、get メソッドと set メソッドにマークを付けておけば個別に制御することも可能で、シリアライズは get メソッド、デシリアライズは set メソッドに対応します。親子関係では、逆シリアル化されるときに、@JsonIgnore は無視されたプロパティ値 (親または子) を自動的に挿入しません。これが、@JsonBackReference および @JsonManagingReference との最大の違いです。  

7、@RequestMapping

ルーティング情報を提供し、コントローラー内の特定の機能に URL をマッピングします。

8、@インポート

アプリケーションではIOCコンテナにクラスをインジェクトしない場合がありますが、そのクラスを使用する際にはそのクラスに対応するBeanを取得する必要があり、その際には @Import アノテーションを使用する必要があります。

9、リソースのインポート

ImportResource は、XML 構成ファイルをロードするために使用されます。

10、@サービス、@コンポーネント、@リポジトリ、@コントローラー

  1. @Configuration 構成クラスを Final タイプにすることはできません。
  2. @Configuration 構成クラスを匿名クラスにすることはできません。
  3. ネストされた構成クラスは静的クラスである必要があります。

@Service はビジネス層コンポーネントをマークするために使用されます。

@Controller は、コントロール層コンポーネントをマークするために使用されます。

@Repository は、データ アクセス コンポーネント、つまり DAO コンポーネントをマークするために使用されます。

@Component はコンポーネント全般を指します。コンポーネントを分類するのが難しい場合は、このアノテーションを使用してコンポーネントをマークできます。

11、@ビーン

@Bean でマークされたメソッドは、XML で構成された Bean と同等です。

12、@値

Spring boot application.properties で設定されたプロパティの値をプロパティに注入します。

13、@インジェクト

デフォルトの @Autowired と同等ですが、必須属性がありません。

14、@RequestBody

1) デフォルトの application/x-www-form-urlcoded エンコードされたコンテンツ以外のコンテンツ タイプを処理するためによく使用されます。たとえば、application/json や application/xml などです。一般的に、アプリケーション/json タイプを処理するためによく使用されます。

2) @requestBody を通じて、リクエストボディ内の JSON 文字列を対応する Bean にバインドできます。もちろん、それぞれ対応する文字列にバインドすることもできます。

3) 一部の特殊なケースでは、@requestBody を使用して content-type タイプが application/x-www-form-urlcoded であるコンテンツを処理することもできますが、このメソッドはあまり一般的ではありません。そのようなリクエストを処理するとき、@requestBody は処理結果を MultiValueMap<String, String> に入れますが、これは一般に特殊な場合に使用されます。たとえば、jQuery easyUI の datagrid はデータをリクエストするときにこのメソッドを使用する必要があり、小規模なプロジェクトでは POJO クラスのみを作成します。また、この accept メソッドを使用することもできます

15、@RequestParam

これは、指定されたリクエスト パラメータをメソッド内の仮パラメータに割り当てるために使用されます。

16、@ModelAttribute

パラメータを Model オブジェクトにバインドする

17、@初級

自動アセンブリ中に複数の Bean 候補がある場合、@Primary としてアノテーションが付けられた Bean が優先されます。それ以外の場合は例外がスローされます。

18、@予選

Qualifier は有資格者を意味します このマークにより、どの実装クラスが必要かを示します @Qualifier アノテーションを追加します なお、@Qualifier のパラメータ名は以前に @Service アノテーションを定義した名前の 1 つです

19、@PostConstruct、@PreConstruct

1)@PostConstruct

     @PostConstruct によって変更されたメソッドは、Servlet の inti() メソッドと同様に、サーバーがサーブレットをロードするときに実行され、サーバーによって 1 回だけ呼び出されます。@PostConstruct によって変更されたメソッドは、コンストラクターの後、init() メソッドの前に実行されます。

2)@PreConstruct

     @PreConstruct によって変更されたメソッドは、サーブレットの destroy() メソッドと同様に、サーバーがサーブレットをアンロードするときに実行され、サーバーによって 1 回だけ呼び出されます。@PreConstruct によって変更されたメソッドは、destroy() メソッドの後、サーブレットが完全にアンロードされる前に実行されます。

2、ロンバックの注釈

1、@ゲッター

エンティティ クラスは、対応する get() メソッドを生成します。

2、@セッター

エンティティ クラスは、対応する set() メソッドを生成します。

3、@データ

1) このアノテーションはクラスで使用されます。これは、@ToString、@EqualsAndHashCode、@Getter、および @Setter を組み合わせた最も一般的に使用されるアノテーションです。@Data基本的にアノテーション、クラスのデフォルトの合計を使用し@ToString@EqualsAndHashCode各フィールドには@Settersumがあります@getter@NonNullこのアノテーションは、任意のフィールドとフィールドをパラメーターとして受け取ることができるパブリック コンストラクターも生成しますfinal

2)@Dataアノテーションは非常に便利ですが、他のアノテーションと同じ粒度の制御がありません。@Data静的ファクトリを生成できる単一のパラメータを提供し、staticConstructorそのパラメータを必要な名前に設定し、Lombok によって自動的に生成されたコンストラクタをプライベートとして設定し、指定された名前のパブリック静的ファクトリ メソッドを提供します。

4、@NonNull

このアノテーションは属性で使用され、属性の非 null チェックに使用されます。setter メソッドのフィールドに配置すると、null チェックが生成され、空の場合はスローされますNullPointerExceptionこのアノテーションは、デフォルトでパラメーターなしのコンストラクターを生成します。 

5、@ToString

このアノテーションはクラスで使用され、デフォルトで名前と値の形式で非 Podium フィールド出力を生成します。 
1) 必要に応じて、includeFieldNamesアノテーション パラメーターを通じて属性名を出力に含めるかどうかを制御できます。 
2)excludeパラメータにフィールド名を含めることにより、生成されたメソッドから特定のフィールドを除外できます。 
3)callSuperパラメータを通じて親クラスの出力を制御できます。
 

6、@EqualsAndHashCode

このアノテーションはクラス上で使用され、クラスレベルのアノテーションもequals()同時に生成されますhashCode()継承関係がある場合、callSuperパラメータを に設定する必要がありますtrue

7、@AllArgsConstructor

このアノテーションはclassで使用され、フルパラメータの構築メソッドを提供しますが、デフォルトでは引数なしの構築は提供されません。 

8、@NoArgsConstructor

このアノテーションはclassで使用され、引数なしの構造を提供します。

9、@RequiredArgsConstructor

このアノテーションはクラスで使用され、@NonNull アノテーションが付けられたすべてのメンバー変数、またはクラス内の最終変更が行われたメンバー変数に対応するコンストラクターを生成します。 

10、@値

このアノテーションはエンティティ クラスに作用し、すべてのパラメータを持つコンストラクター、get() メソッドを生成し、また、equals()、hashCode()、toString() メソッドも提供します。 
注: セッターはありません ()

11、@クリーンアップ

このアノテーションはプロパティの前に使用され、割り当てられたリソースが確実に解放されるようにするために使用されます。ローカル変数にこのアノテーションを使用すると、後続のコードは try/finally にカプセル化され、現在有効なリソースが確実に解放されます。デフォルトの@Cleanupクリーニング方法では、closevalue を使用して別のメソッド名を指定できます。

3. JPA アノテーション 

1、@エンティティ

@Entity はエンティティ クラスに使用され、Java クラスがエンティティ クラスであり、指定されたデータベース テーブルにマップされることを示します。エンティティ クラス User を宣言すると、データベース内の user テーブルにマッピングされます。

2、@テーブル

1) エンティティ クラスの名前とマッピングされたデータベース テーブル名が異なる場合は、@Table アノテーションを使用する必要があります。このアノテーションは、@Entity アノテーションと並行して使用され、エンティティ クラス宣言ステートメントの前に配置されます。別のステートメント行に記述することも、宣言ステートメントと一緒に記述することもできます。

2) @Table アノテーションの共通オプションは、データベースのテーブル名を指定するために使用される name です。@Table アノテーションには、テーブルが属するデータベース カタログまたはスキーマ (通常はデータベース名) を設定するために使用される、catalog と schema という 2 つのオプションもあります。

3、@ID

@Id アノテーションは、エンティティ クラスの属性がデータベースの主キー列にマップされることを宣言するために使用されます。属性は通常、属性宣言ステートメントの前に配置され、宣言ステートメントと一緒に記述することも、別の行に記述することもできます。@Id アノテーションは、プロパティの getter() メソッドの前に配置することもできます。

4、@GeneratedValue

@GeneratedValue は、strategy 属性で指定された主キーの生成戦略をマークするために使用されます。デフォルトでは、JPA は基盤となるデータベースに最も適した主キー生成戦略を自動的に選択します。SqlServer は ID に対応し、MySQL は自動インクリメントに対応します。次の代替戦略が javax.persistence.GenerationType で定義されています。

IDENTITY: 主キー フィールドは、Oracle ではサポートされていないデータベース ID 自己インクリメント方式を使用して自己インクリメントされます。

自動: JPA は適切な戦略を自動的に選択します。これがデフォルトのオプションです。

SEQUENCE: シーケンスを通じて主キーを生成し、 @SequenceGeneratorアノテーションを通じて シーケンス名を指定します。MySql はこのメソッドをサポートしていません。

テーブル: 主キーはテーブルを通じて生成されます。フレームワークはテーブル シミュレーション シーケンスを通じて主キーを生成します。この戦略を使用すると、アプリケーションをデータベースに簡単に移行できます。

5、@基本

@Basic は、デフォルトで存在するデータベース テーブル フィールドへの属性の単純なマッピングを表します。

@Basic fetch: この属性の読み取り戦略を示します。EAGER と LAZY の 2 つのタイプがあり、それぞれメイン ブランチのフェッチと遅延ロードを表します。デフォルトは EAGER です。

オプション: 属性を null にすることが許可されるかどうかを示します。デフォルトは true です。

6、@コラム

エンティティの属性の名前が、マップ先のデータベース テーブルの列と異なる場合は、@Column アノテーションを使用する必要があります。この属性は通常、エンティティの属性宣言ステートメントの前に配置され、@Id アノテーションと一緒に使用することもできます。

@Column アノテーションの共通属性は name で、マッピング データベース テーブルの列名を設定するために使用されます。さらに、ラベルには、一意、NULL 可能、長さなどの他の属性も含まれます

@Column 注釈の columnDefinition 属性: データベース内のフィールドの実際のタイプを示します。通常、ORM フレームワークは属性タイプに従ってデータベース内のフィールドのタイプを自動的に決定できますが、データベース内のフィールドのタイプが日付タイプの場合は DATE、TIME、または TIMESTAMP であるかどうかを判断することは依然として不可能です。また、文字列のデフォルトのマッピング・タイプは VARCHAR です。文字列タイプを特定のデータベースの BLOB または TEXT フィールド・タイプにマップする場合。

@Column アノテーションは、プロパティの getter メソッドの前に配置することもできます。

7、@トランジェント

属性がデータベース テーブルのフィールドへのマッピングではないことを示し、ORM フレームワークはこの属性を無視します。属性がデータベース テーブルのフィールド マッピングではない場合は、@Transient としてマークする必要があります。それ以外の場合、ORM フレームワークはデフォルトでその注釈を @Basic に設定します

8、@時間的

Date 型の時間精度は、コア Java API では定義されていません。データベースでは、Date 型を表すデータには DATE、TIME、TIMESTAMP (つまり、単純な日付、時刻、またはその両方) の 3 つの精度があり、属性マッピングを実行するときに @Temporal 注釈を使用して精度を調整できます。

9、@TableGenerator

現在の主キーの値はデータベースのテーブルに別途保存されており、毎回指定したテーブルにクエリを実行することで主キーの値が取得されます。この主キーの生成方法はどのようなデータベースにも適用でき、データベース間の非互換性による問題を心配する必要はありません。

属性:

1) name 属性は、@GeneratedValue で設定されたジェネレーター値で参照される主キー生成戦略の名前を示します。

2) テーブル属性は、テーブル生成戦略によって永続化されるテーブルの名前を示します。

3) pkColumnName 属性の値は、永続テーブル内の主キー生成戦略に対応するキー値の名前を表します。

4) valueColumnName 属性の値は、永続テーブルの主キーによって現在生成されている値を表し、その値は作成されるたびに累積されます。

5) pkColumnValue 属性の値は、永続テーブルの生成戦略に対応する主キーを表します。

6)allocationSize は、各主キー値の増加のサイズを示します。デフォルト値は 50 です。

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/qq_42133100/article/details/89084518