春ブート共通の原則と整理ノート

 

まず、コメントを開始@SpringBootApplication

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@継承されました

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan(excludeFilters = {@Filter(タイプ= FilterType.CUSTOM、クラス= TypeExcludeFilter.class)

        @Filter(タイプ= FilterType.CUSTOM、クラス= AutoConfigurationExcludeFilter.class)})

公共@interface SpringBootApplication {

    

}

 

SpringBootApplicationが複雑な注釈である@ビューソースは、見つけることができる、それが@ SpringBootConfiguration、@ EnableAutoConfiguration`、@ ComponentScan` 3冊のノートが含まれています

`` @SpringBootConfigurationノート、継承@Configurationノートは、主にConfiguration` @から継承された負荷設定ファイル@SpringBootConfigurationに使用され、二つの機能は、現在のクラスと一致しているコンフィギュレーション・クラスをマークされ、現在のクラスは、一つ以上の内で宣言されますマークの方法としては、容器内に@Beanスプリング注釈を付け、およびインスタンス名は、メソッドの名前です。

SpringBootは、すべての適格@Configurationの構成に適用@EnableAutoConfigurationノート、自動設定機能の@EnableAutoConfigurationを開くのを助けることができるIoCコンテナを作成して使用現在SpringBootにロードされます。春のフレームワークでは、元のクラスのツールです:サポートSpringFactoriesLoaderは、EnableAutoConfiguration @インテリジェントに自動設定の効果が達成できたことができます

@ComponentScan注釈は、主に自動的にスキャンし、ローディングアセンブリ修飾又はビーン定義をスキャンし、自動組立@ComponentScan成分が実際に機能するために、これらのビーン定義は、最終的に容器にロードされます。私たちは、SpringBootを置くクラス宣言@ComponentScanパッケージが配置されている達成するために、Springフレームワークから、デフォルトのスキャンを指定しない場合、デフォルトでは、指定されていない、それはクラスを開始するのが最善である、など、指定にbasePackages @ComponentScan自動スキャンの範囲を属性することができますルートパッケージインチ

二、コントローラ関連の注意事項

@コントローラ

コントローラ、httpリクエストを処理します。

@RestController複雑ノート

ビュー@RestControllerソース

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@コントローラ

@ResponseBody

公共@interface RestController {

 

    

    @AliasFor(注釈= Controller.class)

    文字列値()デフォルト「」;

}

 

RestController注釈が一緒@ ResponseBody + @コントローラに相当し、方法を用いて効果RestControllerブラウザでJSON形式のディスプレイに直接オブジェクトを返す@我々は、ソースから知っています。

@RequestBody

そして、デシリアライズオブジェクトはリクエストボディHttpMessageConverterを読み取ることにより、対象物(を参照します)

@RequestMapping

@RequestMappingは、最も頻繁に使用される1つのコメント春のWebアプリケーションです。このアノテーションは、HTTPリクエストの処理方法とMVCコントローラRESTにマッピングされます

特定の注釈ハンドラにマッピングされたHTTP GETリクエストのための方法を@GetMapping

速記注釈:@RequestMapping(値=、メソッド= RequestMethod.GETが "/言う")に相当する:( "と言う/" =値)@GetMapping

GetMappingソース

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@RequestMapping(メソッド= RequestMethod.GET)

公共@interface GetMapping {

 

}

 

の略語@RequestMapping(法= RequestMethod.GET)であります

HTTP POSTリクエストは、特定のアノテーション・ハンドラにマッピングされる方法を@PostMapping

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@RequestMapping(メソッド= RequestMethod.POST)

公共@interface PostMapping {

    

}

 

の略語@RequestMapping(法= RequestMethod.POST)であります

第三に、リクエストパラメータの値をフェッチ

@PathVariable:URL内のデータを取得します

@コントローラ

@RequestMapping( "/ユーザ")

パブリッククラスHelloWorldController {

 

    @RequestMapping( "/のgetUser / {UID}")

    パブリック文字列のgetUser(@PathVariable( "UID")整数ID、モデルモデル){

        System.out.println( "ID:" + ID)。

        「ユーザー」を返します。

    }

}

 

要求の例します。http:// localhost:8080 /ユーザー/ getUserメソッド/ 123

@RequestParam:GETリクエストパラメータ

@コントローラ

@RequestMapping( "/ユーザ")

パブリッククラスHelloWorldController {

 

@RequestMapping( "/ getUserメソッド")

パブリック文字列のgetUser(@RequestParam( "UID")整数ID、モデルモデル){

    System.out.println( "ID:" + ID)。

    「ユーザー」を返します。

}

}

 

リクエスト例ます。http:// localhost:?8080 /ユーザー/ getUserメソッドはuid = 123

注入豆に関連する第四に、

@RepositoryDAO注釈層、JpaRepository継承DAO層インターフェイス<T、IDは、シリアライズを拡張>、自動的ジャーに装填された関連のJPA build.gradleに導入する必要があります。

ノートソースリポジトリ

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@成分

公共@interfaceリポジトリ{

 

    

    @AliasFor(注釈= Component.class)

    文字列値()デフォルト「」;

 

}

@サービス

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@成分

公共@interfaceサービス{

 

    

    @AliasFor(注釈= Component.class)

    文字列値()デフォルト「」;

}

 

@Service @Componentアノテーションは、アノテーションの設定とクラスパスのスキャンの単一の実施形態@Service範囲のデフォルトの注釈のクラスに作用する、特殊なケースで、マークされたクラスは@Service注釈春がスキャンされ、サービス@ビーンによって登録されています現在のクラスのクラス名にサービス層成分、サービス@豆を使用するときに定義パラメータに合格しなかったことを意味し、Bean名のデフォルトをマークするときに、最初の文字は@Service(「serviceBeanId」)または@Service(値=「serviceBeanId」)の使用を小文字送信パラメータは、上位クラス及びメソッドのように名前と値の豆@Scopeスコープ@Scopeアノテーション機能を使用すると、スプリング豆範囲を設定することを識別する豆の範囲

@Scopeソース

@Target({ElementType.TYPE、ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

@Documented

公共@interfaceスコープ{

 

    

    ( "scopeName")@AliasFor

    文字列値()デフォルト「」;

 

    ( "値")@AliasFor

    文字列scopeName()デフォルト "";

 

    ScopedProxyMode proxyMode()デフォルトScopedProxyMode.DEFAULT。

}

 

はじめプロパティ

このBeanは、単一の実施形態を示しているシングルトンです。(デフォルト)

これは、Beanは、新しいオブジェクトを作成するたびに、即ち、マルチ豆であるプロトタイプの実施形態を表します。

HTTPは、Beanの例に対応する、要求内の要求します。

1つのHttpSessionのセッションでは、豆の一例に相当します。

proxyMode

DEFAULTは、プロキシを使用しません。(デフォルト)

エージェントが使用されていないNO、それはDEFAULTと同等ではありません。

INTERFACES基づく薬剤(JDKダイナミックプロキシ)インタフェース。

クラスベースのエージェントを使用してTARGET_CLASS(CGLIB)。

@Entityエンティティクラスのノート

@Table(名=「データベーステーブル」)、それぞれのデータベーステーブルに対応また、注釈エンティティクラスにアノテーション。

列の注釈がエンティティクラスのフィールドを指定するために使用される、@ Idを@、PKフィールドラベル@Idは、@Columnを残り。

Beanを生成する方法@Bean

プロセス、豆を生産するための方法、およびSpringコンテナにを示す明示的@Bean。サポートエイリアス@Bean( "XX-名")

@Autowired自動的にインポート

@Autowired注釈は、コンストラクタ、プロセス、プロセスパラメータ、及びクラスフィールド注釈に作用します

@Autowired注釈は自動的にビーンに注入することができます

コンフィギュレーション・ファイルに対応する、容器内にインスタンス化され、通常のスプリングPOJOを@Component

そこ@Autowired、しかし、我々はまだBean構成ファイル、面倒なの束を書きたい、と@Componentは春を伝えることですされているが、私はそれが、春は自動的に関連する情報を抽出しますコンテナに登録され、POJOクラスでした。我々は、XML設定ファイルを書くことを気にしないので、

V.プロファイルのインポート

@PropertySourceコメント

単一のプロパティファイルの導入:

@PropertySource(値= { "クラスパス:XXXX / xxx.properties"})

複数のプロパティファイルの導入:

@PropertySource(値= { "クラスパス:XXXX / xxx.properties"、 "クラスパス:xxxx.properties"})

@ImportResourceインポートXML設定ファイル

付加的なモデルは、2つの相対パスクラスパス、絶対パス(真のパス)ファイルに分割することができます

注:単一のファイルには、値や場所、値を書き込むことができないと場所が用意されています

相対パス(クラスパス)

@ImportSource( "クラスパス:XXX / xxxx.xml")単一のXML設定ファイルの紹介

@ImportSource(位置= { "クラスパス:xxxx.xml"、 ":yyyy.xmlクラスパス"})複数のXML構成ファイルを導入

絶対パス(ファイル)

@ImportSource(位置= { "/hellxz/dubbo.xmlファイル:::D"})は、単一のXML構成ファイルを導入

@ImportSource(位置= { "ファイル:D:/hellxz/application.xml"、 "/hellxz/dubbo.xmlファイル:D"})複数のXML構成ファイルを導入

値:@valueプロファイルのメモを取るために使用される値

@valueプライベート文字列XXX( "$ {キーのプロパティ}")。

追加の設定情報をインポートする@import

インポート構成クラスにXML機能的に同様の構成、構成が@Configuration注釈またはクラスが実装ImportSelector / ImportBeanDefinitionRegistrarで導入することができます。

使用例

@SpringBootApplication

@import({SmsConfig.class})

パブリッククラスDemoApplication {

    パブリック静的無効メイン(文字列[] args){

        SpringApplication.run(DemoApplication.class、引数)。

    }

}

 

第六に、トランザクションのコメント@Transactional

春では、トランザクションは、2つの方法では、二つの方法で、すなわちプログラムトランザクション管理と宣言的トランザクション管理を実装しました

プログラムによるトランザクション管理:プログラムによるトランザクション管理TransactionTemplateの使用やPlatformTransactionManagerの基礎となる直接使用します。プログラムによるトランザクション管理では、春はTransactionTemplateをお勧めします。宣言型トランザクション管理:AOPの上に構築されました。その本質は、前と後にインターセプト法にあり、かつターゲットメソッドが始まる前に、トランザクションを作成したり、参加し、トランザクションをコミットまたはロールバック、トランザクションがターゲットメソッド、より効率的かつ簡単な実行後の@Transactionalによる操作の実装に合わせて行うことができます。推奨

七つのグローバル例外ハンドラ

統一された例外処理@ControllerAdvice

@ControllerAdviceアノテーションは、グローバル例外ハンドラクラスを定義します

@ControllerAdvice

パブリッククラスGlobalExceptionHandler {

}

@ExceptionHandler声明ノート例外処理

@ControllerAdvice

パブリッククラスGlobalExceptionHandler {

 

    @ExceptionHandler(Exception.class)

    @ResponseBody

    ストリングhandleException(){

        リターン「例外ディール!」。

    }

}

 

 

おすすめ

転載: www.cnblogs.com/dgwblog/p/11967375.html