Spring Boot共通アノテーションまとめ
1. 起動アノテーション @SpringBootApplication
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM、classes = TypeExcludeFilter.class),
@Filter(type = FilterType) .CUSTOM、classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication { // ... ここ处省略ソースコード}
ソース コードを見ると、@SpringBootApplication が @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan を含む複合アノテーションであることがわかります。
@SpringBootConfiguration アノテーションは @Configuration アノテーションを継承し、主に構成ファイルをロードするために使用されます。
@SpringBootConfiguration は @Configuration を継承し、2 つの機能も一貫しています。現在のクラスは構成クラスとしてマークされ、1 つ以上が宣言されています現在のクラスでは @Bean になります。 アノテーションマーク付きメソッドのインスタンスは Spring コンテナーに含まれており、インスタンス名がメソッド名になります。
@EnableAutoConfiguration アノテーション、自動構成機能を有効にする
@EnableAutoConfiguration は、SpringBoot アプリケーションが対象となるすべての @Configuration 構成を現在の SpringBoot によって作成および使用される IoC コンテナーにロードするのに役立ちます。Spring フレームワークのオリジナル ツール クラスの助けを借りて、SpringFactoriesLoader のサポートにより、@EnableAutoConfiguration は関数が成功するようにインテリジェントかつ自動的に構成できます。
@ComponentScan アノテーションは主にコンポーネントのスキャンと自動アセンブリに使用され、
実際の @ComponentScan の機能は、修飾されたコンポーネントまたは Bean 定義を自動的にスキャンしてロードし、最終的にこれらの Bean 定義をコンテナーにロードすることです。@ComponentScan 自動スキャンの範囲は、basePackages などの属性で指定できます。指定しない場合、デフォルトの Spring フレームワークは、@ComponentScan が配置されているクラスを宣言するパッケージからスキャンを実装します。デフォルトでは、指定されていないため、 SpringBoot のスタートアップ クラスをルート パッケージの下に置くのが最善です。
2. コントローラー 関連アノテーション
@Controller
http リクエストを処理するコントローラー。
@RestController 複合アノテーション
@RestController ソース コードの表示
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {/** * この値は 、自動検出されたコンポーネントの場合に Spring Bean に変換される
論理コンポーネント名の提案を示す場合があります。 * @提案されたコンポーネント名があればそれを返します(そうでない場合は空の文字列) * @since 4.0.1 */ @AliasFor(annotation = Controller.class) String value() default ""; }
ソース コードから、@RestController アノテーションは @ResponseBody+@Controller の複合効果と同等であることがわかります。RestController の効果は、メソッドによって返されたオブジェクトを json 形式でブラウザ上に直接表示することです。
@RequestBody は
、HttpMessageConverter を通じてリクエスト本文を読み取り、それを Object (一般的に参照する) オブジェクトに逆シリアル化します。
@RequestMapping
@RequestMapping は、Spring Web アプリケーションで最も一般的に使用されるアノテーションの 1 つです。このアノテーションは、HTTP リクエストを MVC および REST コントローラーの処理メソッドにマップします。
@GetMapping は、HTTP 取得リクエストを特定のハンドラーのメソッド アノテーションにマッピングするために使用されます。 アノテーションの
短縮表記: @RequestMapping(value = "/say", method = RequestMethod.GET) は、以下と同等です: @GetMapping(value = "/say")
GetMapping ソースコード
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping { //... }
@RequestMapping(method = RequestMethod.GET) の略称です。
HTTP 投稿リクエストを特定のハンドラーにマッピングするための @PostMapping メソッド アノテーション
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping { //... }
@RequestMapping(method = RequestMethod.POST) の略称です。
3. リクエストパラメータ値を取得
@PathVariable: URL 内のデータを取得します
@Controller
@RequestMapping("/User")
public class HelloWorldController {@RequestMapping("/getUser/{uid}")
public String getUser(@PathVariable("uid")Integer id, Model モデル) { System.out.println("id:"+id); 「ユーザー」を返します。 } }
リクエストの例: http://localhost:8080/User/getUser/123
@RequestParam: リクエストパラメータの値を取得します
@Controller
@RequestMapping(“/User”)
public class HelloWorldController {@RequestMapping("/getUser")
public String getUser(@RequestParam("uid")Integer id, Model モデル) { System.out.println("id:"+id); 「ユーザー」を返します。} }
リクエストの例: http://localhost:8080/User/getUser?uid=123
@RequestHeader Request ヘッダー部分の値をメソッドのパラメーターにバインド
@CookieValue Request ヘッダーの Cookie の値をメソッドのパラメーターに
バインド 4. Bean 関連の
@Repository
DAO レイヤー アノテーションとインターフェイスを注入しますDAO レイヤーでは JpaRepository <T, ID extends Serializable> を継承するため、関連する jpa の jar を build.gradle に導入して自動的にロードする必要があります。
リポジトリアノテーションのソースコード
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {/** * この値は 、自動検出されたコンポーネントの場合に Spring Bean に変換される
論理コンポーネント名の提案を示す場合があります。 * @提案されたコンポーネント名があればそれを返します(そうでない場合は空の文字列) */ @AliasFor(annotation = Component.class) String value() default "";}
@Service
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {/** * この値は 、自動検出されたコンポーネントの場合に Spring Bean に変換される
論理コンポーネント名の提案を示す場合があります。 * @提案されたコンポーネント名があればそれを返します(そうでない場合は空の文字列) */ @AliasFor(annotation = Component.class) String value() default ""; }
@Service は、@Component アノテーションの特殊なケースです。クラスに作用します。
@Service アノテーションのスコープは、デフォルトではシングルトンです
。アノテーション構成とクラスパス スキャンを使用する場合、@Service アノテーションによってマークされたクラスは、 Spring によってスキャンされ、Bean @Service として登録されます。サービス層コンポーネントをマークするには、使用時にパラメーターを渡さずに Bean @Service を
定義することを意味します。Bean 名のデフォルトは、現在のクラスのクラス名と最初の文字です@Service("serviceBeanId") または @Service(value="serviceBeanId") が使用される場合は
小文字になります
。 パラメーターを渡し、値を Bean 名として使用します。
@Scope スコープのアノテーション
@Scope は、クラスおよびメソッドに作用して、スプリングのスコープを構成します。 Bean。Bean のスコープを識別します。
@Scope ソースコード
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {/**
* {@link #scopeName} のエイリアス。
* @see #scopeName
*/
@AliasFor("scopeName")
String value() デフォルト "";@AliasFor("value")
StringscopeName() デフォルト "";ScopedProxyMode proxyMode() デフォルト ScopedProxyMode.DEFAULT;
}
物件紹介
値
singleton は、Bean がシングルトンであることを示します。(デフォルト)
プロトタイプは、Bean がマルチインスタンスであること、つまり Bean が使用されるたびに新しいオブジェクトが作成されることを示します。
request http リクエストでは、1 つの Bean が 1 つのインスタンスに対応します。
session httpSession では、Bean がインスタンスに対応します。
proxyMode
DEFAULT プロキシを使用しません。(デフォルト)
NO プロキシを使用しません。DEFAULT と同等です。
INTERFACES は、インターフェイスベースのプロキシ (jdk ダイナミック プロキシ) を使用します。
TARGET_CLASS はクラスベースのプロキシ (cglib) を使用します。
@Entity エンティティ クラス アノテーション
@Table(name = "データベース テーブル名")。このアノテーションは、データベース内の対応するテーブルに対応するエンティティ クラスにもアノテーションが付けられます。
@Id および @Column 注釈はエンティティ クラス内のフィールドをマークするために使用され、pk フィールドは @Id としてマークされ、残りは @Column としてマークされます。
@BeanはBeanメソッドを生成します
@Beanはメソッドを明示してBeanメソッドを生成し、Springコンテナに渡して管理します。エイリアス @Bean("xx-name") のサポート
@Autowired は、コンストラクター、メソッド、メソッド パラメーター、クラス フィールド、およびアノテーションに作用する @Autowired アノテーションを自動的にインポートします
。@Autowired アノテーションは、Bean の自動注入を実現できます。
@Component
は、通常の pojo を Spring コンテナーにインスタンス化します。これは、以下と同等です設定ファイル。
@Autowired を使用しても、それでも大量の Bean 設定ファイルを作成する必要があり、これは非常に面倒です。また、@Component は Spring に私が pojo クラスであることを伝え、私をコンテナーに登録すると、Spring が関連情報を自動的に抽出します。そうすれば、面倒な XML 設定ファイルを書く必要がなくなります。
5. 構成ファイル
@PropertySource アノテーションを
インポートする 単一のプロパティ ファイルを導入します。
@PropertySource(値 = {“クラスパス : xxxx/xxx.properties”})
複数のプロパティ ファイルを導入します。
@PropertySource(値 = {“クラスパス : xxxx/xxx.properties”,“クラスパス : xxxx.properties”})
@ImportResource インポート XML 設定ファイルは、
相対パス クラスパス、絶対パス (実パス) ファイルの 2 つのモードに分けることができます。
注: 単一のファイルに値や場所を書き込む必要はありません。値と場所の両方を使用できます。
相対パス (クラスパス)
単一の XML 構成ファイルを導入します: @ImportSource("classpath: xxx/xxxx.xml")
複数の XML 設定ファイルを導入します: @ImportSource(locations={“クラスパス: xxxx.xml”, “クラスパス: yyyy.xml”})
絶対パス(ファイル)
単一の XML 構成ファイルをインポートします: @ImportSource(locations= {“file : d:/hellxz/dubbo.xml”})
複数の XML 設定ファイルを導入します: @ImportSource(locations= {“file : d:/hellxz/application.xml”, “file : d:/hellxz/dubbo.xml”})
値: @Value アノテーションを使用して構成ファイル内の値を取得します。
@Value("${properties} のキー")
private String xxx;
@Import 追加の構成情報をインポートする
この機能は XML 構成に似ており、構成クラスをインポートするために使用されます。@Configuration アノテーションを使用して構成クラスをインポートするか、ImportSelector/ImportBeanDefinitionRegistrar を実装できます。
使用例
@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
6. トランザクションアノテーション @Transactional
Spring では、プログラムによるトランザクション管理と宣言的トランザクション管理という 2 つのトランザクション実装方法があります。
プログラムによるトランザクション管理: プログラムによるトランザクション管理は、TransactionTemplate を使用するか、基盤となる PlatformTransactionManager を直接使用します。プログラムによるトランザクション管理の場合、Spring では TransactionTemplate の使用を推奨しています。
宣言型トランザクション管理: AOP の上に構築されます。その本質は、前後のメソッドをインターセプトし、対象のメソッドが開始される前にトランザクションを作成または参加し、対象のメソッドが実行された後に実行状況に応じてトランザクションをサブミットまたはロールバックすることであり、トランザクション操作は @ を通じて実行できます。トランザクション型。より高速かつシンプルです。
7. グローバル例外処理@ControllerAdviceの使用を推奨
統合例外処理
@ControllerAdvice アノテーションでグローバル例外処理クラスを定義
@ControllerAdvice
パブリック クラス GlobalExceptionHandler { }
@ExceptionHandler アノテーションは例外処理メソッドを宣言します
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){ return "例外処理!"; } }