1.SpringBootの概要
Spring BootはSpringオープンソース組織のサブプロジェクトであり、その設計目的は、新しいSpringアプリケーションの初期セットアップと開発プロセスを簡素化することです。このフレームワークは「従来は構成よりも優れている」アプローチを採用し、Springアプリケーションを迅速に構築するためのさまざまなスターターを提供します。
2、SpringBootの機能
SpringBootの機能
- 使いやすく、開発効率を向上させ、Spring開発のより迅速で広範な入門エクスペリエンスを提供します。
- 面倒な構成から離れて、箱から出して。
- TomcatやJettyなどの組み込みサーブレットコンテナ。
- 「スターター」プロジェクトオブジェクトモデル(POMS)の自動構成を提供して、Maven構成を簡素化します。
- 組み込みサーバー、セキュリティ管理、運用データの監視、運用状況の確認、外部構成など、大規模プロジェクトに共通する一連の非ビジネス機能を提供します。
- コード生成はなく、XML構成も必要ありません。
箱から出して何がありますか?
Outofboxは、関連する依存関係パッケージをMAVENプロジェクトのpomファイルに追加し、面倒なXML構成ファイルの代わりに対応するアノテーションを使用することにより、オブジェクトのライフサイクルを管理することを意味します。この機能により、開発者は複雑な構成作業や依存する管理作業を取り除き、ビジネスロジックにさらに集中することができます。
設定より規約とは何ですか?
設定より規約の方が優れています。設定より規約は、SpringBoot自体がターゲット構造を構成し、開発者が構造に情報を追加するソフトウェア設計パラダイムです。この機能により、柔軟性が低下し、BUGの場所が複雑になりますが、開発者が行う必要のある決定の数が減り、同時に多くのXML構成が減り、コードのコンパイル、テスト、およびパッケージ化を自動化できます。
3つ目は、SpringBootで一般的に使用されるアノテーションです。
同様の注意ソリューションを開始する
-
@SpringBootApplication:起動アノテーション、@ SpringBootApplicationは、@ ComponentScan、@ SpringBootConfiguration、@ EnableAutoConfigurationを含む複合アノテーションです。
-
@SpringBootConfigurationは@Configurationを継承します。2つの関数も同じです。現在のクラスは構成クラスとしてマークされ、@ Beanアノテーションでマークされた現在のクラスで宣言されたメソッドの1つ以上のインスタンスがsrpingに含まれます。コンテナ、インスタンス名メソッド名です。
-
@EnableAutoConfigurationの機能は、自動構成を開始することです。@ EnableAutoConfigurationアノテーションは、Springbootが追加したjarパッケージに従ってプロジェクトのデフォルト構成を構成することを意味します。たとえば、spring-boot-starter-webに従って、次のことを決定できます。プロジェクトを追加する必要があります。webmvcとtomcatは、Webプロジェクトで必要なデフォルト構成の構成を自動的に支援します。
-
@ComponentScanは、現在のパッケージとそのサブパッケージの下にある@ Component、@ Controller、@ Service、および@Repositoryアノテーションでマークされたクラスをスキャンし、管理のためにそれらをSpringコンテナーに組み込みます。contextと同等:component-scan(パッケージ構成の並列サポートをスキャンするためにxmlのSpringフレームワークで使用されるタグ)。
-
@ServletComponentScan:SpringBootApplicationで@ServletComponentScanアノテーションを使用した後、サーブレット、フィルター、およびリスナーは、追加のコードなしで、@ WebServlet、@ WebFilter、および@WebListenerアノテーションを介して自動的に直接登録できます。
-
@MapperScan( ""):@ MapperScanアノテーションは、クラスではなく、指定されたパッケージ内のインターフェイスのみをスキャンします。
-
@EnableScheduling:タイミングサービスを開始するためにクラスで使用されるSpring独自のタイミングサービスアノテーション、@ Scheduledはメソッドで使用され、メソッドのタイミング時間を設定できます
コントローラー層はソリューションを懸念しています
- @Controller:ページに応答するために使用され、現在のクラスがコントローラーであることを示します。
- @RestController:@ResponseBodyと@Controllerの組み合わせであり、現在のクラスがコントローラーであり、ページではなくデータのセットを返すことを示します。
- @Autowired:依存オブジェクトをタイプ別にアセンブルします
- @Resource:名前またはタイプでオブジェクトをアセンブルできます
- @RequestMapping:ロールはURLマッピングであり、フロントエンドインターフェイスがコントローラーの特定のメソッドを呼び出すために使用されます
- @GetMapping:@RequestMapping(method = RequestMethod.GET)の省略形で、リクエストメソッドのGETタイプを処理するために使用されます
- @PostMapping:@RequestMapping(method = RequestMethod.POST)の省略形で、リクエストメソッドのPOSTタイプを処理するために使用されます
- @PutMapping:@RequestMapping(method = RequestMethod.PUT)の省略形。これは、PostMappingと同等であり、サーバーに情報を送信するために使用されます。情報を追加する場合は@PostMappingを使用し、情報を更新する場合は@PutMappingを使用する傾向があります。2つの違いはあまり明白ではありません。
- @DeleteMapping:@RequestMapping(method = RequestMethod.DELETE)の省略形で、リクエストメソッドのDELETEタイプを処理するために使用されます
- @PathVariable:@PathVariableを介して、URLのプレースホルダーパラメーターをコントローラー処理メソッドの入力パラメーターにバインドできます。URLの{xxx}プレースホルダーは、@ PathVariable( "xxx")Intoによって操作メソッドにバインドできます。高麗人参。
注: @Autowiredアノテーションは、タイプ(byType)に従って依存オブジェクトをアセンブルします。デフォルトでは、依存オブジェクトが存在する必要があります。null値が許可されている場合は、必須属性をfalseに設定できます。byNameを使用してアセンブルする場合は、@ Qualifierアノテーションと組み合わせて使用できます。次のように:
@Autowired
@Qualifier("person")
private Person person;
リソースは、J2EEによって提供されるデフォルトのByNameに従って自動的に挿入され、パッケージjavax.annotation.Resourceをインポートする必要があります。@Resourceには2つの重要な属性があります。nameとtypeです。Springは@Resourceアノテーションが付けられたname属性をBeanの名前として解析し、type属性はBeanのタイプとして解析します。
したがって、name属性を使用する場合は、byNameの自動注入戦略が使用され、type属性を使用する場合は、byTypeの自動注入戦略が使用されます。name属性もtype属性も指定されていない場合、byName自動注入戦略がリフレクションメカニズムを通じて使用されます。
@Resource(name="person")
private Person person;
サービスレイヤー関連ソリューション
- @service:ビジネスレイヤコンポーネントに注釈を付けるために使用されます
Daoレイヤーフェーズアテンションソリューション
- @Repository:クラスがデータベース関連の操作(つまりdaoオブジェクト)を実行するために使用されることを示すために任意のクラスでマークでき、データベース操作によって生成された例外の自動処理をサポートします
4、SpringBoot構成
SpringBoot自動構成の原則
SpringBootの自動構成は、主に@ EnableAutoConfiguration、@ Conditional、@ EnableConfigurationProperties、@ ConfigurationPropertiesなどのいくつかのアノテーションを介して行われます。
Spring Bootが開始すると、メイン構成クラスが最初にロードされます。@ EnableAutoConfigurationは自動構成をオンにします。主な機能は、EnableAutoConfigurationImportSelectorを使用して一部のコンポーネントをコンテナーにインポートし、META-INF /で構成されたEnableAutoConfigurationのすべての値を追加することです。コンテナへのクラスパスの下にあるspring.factories。
@Conditional条件付きアノテーション。クラスパスに対応して構成されたjarパッケージがあるかどうかを判断することにより、このクラスをロードして自動的に構成するかどうかを決定します。
@EnableConfigurationPropertiesの機能は、自動構成用の特定の構成パラメーターを提供することです。これは、application.propertiesに書き込むだけでよく、マッピングを介して構成クラスのPOJOプロパティに書き込むことができます。
SpringBoot構成のロード順序
Spring Bootでは、構成をロードする方法がいくつかあります。
1)プロパティファイル。
2)YAMLファイル。
3)システム環境変数。
4)コマンドラインパラメータ。
SpringBoot内部構成ファイルのロードシーケンス
異なるディレクトリに複数の構成ファイルがある場合、それらの読み取り順序は次のとおり
です。1。config / application.properties(プロジェクトルートディレクトリのconfigディレクトリの下)
2。config/ application.yml
3. application.properties(プロジェクトルートディレクトリ)
4. application.yml
5. resources / config / application.properties(プロジェクトのresourcesディレクトリのconfigディレクトリの下)
6。resources/ config / application.yml
7. resources / application.properties(のresourcesディレクトリの下)プロジェクト)
8、Resources / application.yml
SpringBootはクロスドメインの問題を処理します
クロスドメインとは何ですか?
クロスドメインとは、ブラウザが他のWebサイトのスクリプトを実行できないことを意味します。これは、ブラウザーの同一生成元ポリシーが原因であり、ブラウザーがJavaScriptに課すセキュリティ制限です。
狭義のクロスドメインとは、リクエストURLのプロトコル、ドメイン名、ポートのいずれかが現在のページURLと異なる場合、それがクロスドメインであることを意味します。
SpringBootクロスドメインソリューション
オプション1:@CrossOriginアノテーションを使用する
コントローラで@CrossOriginアノテーションを使用すると、このクラスのすべてのインターフェイスに、次のようなクロスドメインを介してアクセスできます。
@CrossOrigin("www.baidu.com") // 只有指定域名可以访问该类下所有接口
public class CorsTestController {
}
解決策2:CORSグローバル構成-WebMvcConfigurerを実現する
新しいクロスドメイン構成クラス:
/**
* 跨域配置
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Bean
public WebMvcConfigurer corsConfigurer()
{
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").
allowedOrigins("www.baidu.com"). //允许跨域的域名,可以用*表示允许任何域名使用
allowedMethods("*"). //允许任何方法(post、get等)
allowedHeaders("*"). //允许任何请求头
allowCredentials(true). //带上cookie信息
exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L); //maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
}
};
}
}
解決策2:インターセプター実装のカスタマイズ
Fiterインターフェースを実装し、リクエストにいくつかのヘッダーを追加することで、クロスドメインの問題を解決するには、次のようにします。
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
response.getWriter().println("ok");
return;
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}