【専門家インタビュー】——SpringBoot(11の質問)

1.SpringBootとは何ですか?

Spring Boot は、Spring アプリケーション開発を簡素化するために使用されるオープンソース フレームワークです。これは Spring フレームワークに基づいており、Spring アプリケーションを構築およびデプロイするための、より高速で便利な自動化された方法を提供します。Spring Boot の目標は、Spring アプリケーション開発の複雑さを軽減し、生産性を向上させ、デフォルトで共通の構成セットを提供して定型コードを削減することです。

2. Spring Boot が必要な理由は何ですか?

  • 簡素化された構成:デフォルト構成と自動構成により、煩雑な XML 構成ファイルやコード設定の必要性が減り、開発がよりシンプルかつ効率的になります。
  • 迅速な開発:すぐに使用できるテンプレートとコンポーネントを使用して、新しいプロジェクトを迅速に開始できるほか、手動構成を行わずにアプリケーションを実行できる組み込み Web サーバーが提供されます。
  • 統合:一般的に使用される多くのライブラリやフレームワークと統合され、さまざまなデータ ストア、メッセージ キュー、セキュリティ、クラウド サービスとの統合が容易になります。
  • マイクロサービスのサポート: Spring Boot はマイクロサービス アーキテクチャの構築を適切にサポートし、開発者が分散アプリケーションを簡単に作成、デプロイ、管理できるようにします。
  • 自動化されたタスク: Spring Boot は、スケジュールされたタスク、バッチ処理、その他の自動化されたタスクをサポートしており、開発者がバックグラウンド処理とスケジュールをより簡単に処理できるようにします。
  • エコシステム:巨大なエコシステムとアクティブなコミュニティ サポートにより、多数の拡張モジュールとドキュメント リソースを入手できます。
  • オープン性:開発者はお気に入りの開発ツールを選択し、Maven や Gradle などの複数のビルド ツールをサポートします。

3. SpringBoot の特徴は何ですか?

  • 自動構成: Spring Boot は、自動構成を通じて、プロジェクトの依存関係とクラスパス上のリソースに基づいて Spring アプリケーションを構成しようとします。これは、開発者が多数の Spring 構成ファイルを手動で構成する必要がなく、Spring Boot が環境と依存関係に基づいてアプリケーションを自動的に構成することを意味します。
  • スターターの依存関係: Spring Boot は、特定のタイプの関数とライブラリを含む一連の事前定義された「スターターの依存関係」を提供し、必要に応じてプロジェクトに追加できます。スターター依存関係により、依存関係の管理が簡素化され、Spring アプリケーションの構築がより便利になります。
  • Tomcat や Jetty などの組み込みサーブレット コンテナ。
  • 本番対応: Spring Boot は、アプリケーションを本番対応状態に変えるのに役立つ、ヘルス チェック、インジケーターの監視、リモート構成などの一連の機能を提供します。Spring Boot Actuator モジュールはこれらの機能を提供します。
  • 外部構成: Spring Boot は、プロパティ ファイル、YAML ファイル、環境変数などを通じて構成できるコードからアプリケーション構成を分離することをサポートしています。これにより、アプリケーションの構成と管理が容易になります。
  • コード生成と XML 構成は不要: Spring Boot は Java ベースの構成メソッドを使用するため、XML 構成ファイルの使用量が削減されます。同時に、規約とデフォルト構成によって開発が簡素化され、大量の定型コードを生成する必要がなくなりました。
  • エコシステム: Spring Boot には、さまざまなデータベース、メッセージ キュー、セキュリティ、その他の機能を統合するための多数のプラグインや拡張機能を含む強力なエコシステムがあります。

4.SpringBoot の 2 つの戦略とは何ですか?

(1)
Outofbox をすぐに使用することは、開発プロセス中に関連する依存関係パッケージを MAVEN プロジェクトの pom ファイルに追加し、対応するアノテーションを使用して煩雑な XML 構成ファイルを置き換えて、オブジェクトの寿命を管理することを指します。この機能により、開発者は複雑な構成作業や依存関係の管理作業を軽減し、ビジネス ロジックに集中できるようになります。
(2)
構成より規則は、SpringBoot 自体がターゲット構造を構成し、開発者がその構造に情報を追加するソフトウェア設計パラダイムです。この機能により、柔軟性がいくらか低下し、バグの場所の特定が複雑になりますが、開発者が行う必要がある決定の数が減り、大量の XML 構成が削減され、コードのコンパイル、テスト、およびパッケージ化が可能になります。

5. SpringBoot の自動アセンブリ プロセスについて教えてください。

  • Springboot の自動アセンブリ プロセスに関しては、複合アノテーションである Springboot のコア アノテーション @SpringbootApplication と切り離すことはできません。@EnbaleAutoConfiguration 自動アセンブリ アノテーション Springbootは
    、このアノテーションを通じて他のサードパーティ フレームワークを簡単に継承できます。たとえば、JDBC フレームワークを自分で作成し、それを統合したい場合は、このアノテーションが必要です。
    @ComponentScan アノテーションの主な仕事は、@Service、@Controller などのアノテーションが付けられたクラスまたはメソッドをスキャンすることです。スキャン後、Springboot フレームワークにオブジェクトを生成するように通知されます。依存関係が注入された Bean は、このアノテーションによってスキャンされます。
  • @EnbaleAutoConfiguration アノテーションについては上で説明しましたが、これも複合アノテーションです。これは次のアノテーションで構成されます。
    @Import アノテーションは、Java クラス EnbaleAutoConfigurationImportSelector.class をインポートします。構成をインポートします。
    EnbaleAutoConfigurationImportSelector, これは自動構成インポート セレクターです。その機能は、規則に従ってセレクターを構成することです。この規定は、META-INF の下の Spring.factories で独自のニーズに従って選択することです。これは Springboot の特徴であり、設定よりも規約が重要です。
  • EnbaleAutoConfigurationImportSelector は AutoConfigurationImportSelector クラスを継承します。このクラスには
    selectImports メソッドというメソッドがあります。
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
  • The loadFactoryNames メソッドは getCandidateConfigurations メソッドで呼び出され、ロードする必要がある構成項目のソースの詳細を示します。ソースコードは次のとおりです。
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
    
    
    String factoryClassName = factoryClass.getName();
    try {
    
    
        Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
        ArrayList result = new ArrayList();
        while(urls.hasMoreElements()) {
    
    
            URL url = (URL)urls.nextElement();
            Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));
            String factoryClassNames = properties.getProperty(factoryClassName);
            result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
        }
        return result;
    } catch (IOException var8) {
    
    
        throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + "] factories from location [" + "META-INF/spring.factories" + "]", var8);
    }
}

SpringBoot1.5以降の自動組立図:
ここに画像の説明を挿入します
SpringBoot1.5以前:
ここに画像の説明を挿入します

6. Bean とは何ですか?

Bean は単なる通常の Java オブジェクトです。Spring Boot コンテキストでは、これらは Java オブジェクト + アプリケーションの起動時に自動的に初期化され、Spring IOC コンテナによって管理されるオブジェクトとして扱われます。これを実現するために「@Bean」アノテーションがあります。

7. CSRF 攻撃とは何ですか? それを避けるにはどうすればよいでしょうか?

CSRF 攻撃では、攻撃者は、明示的な承認なしにログイン中にユーザーをだまして悪意のある操作を実行させることで、ユーザーの ID を悪用して不正な操作を実行しようとします。

  • CSRF トークンを使用する:ユーザー セッションごとにランダムな CSRF トークンを生成し、それをフォームに埋め込むか、リクエスト ヘッダーに含めます。サーバーはリクエストを受信するときに CSRF トークンがユーザーのセッションと一致することを検証し、一致しない場合はリクエストを拒否します。
  • Referer ヘッダーを確認する: サーバーはリクエストの Referer ヘッダーをチェックして、リクエストが正当な Web サイトからのものであることを確認できます。ただし、ブラウザによっては Referer ヘッダーを送信しない場合や、攻撃者が Referer ヘッダーを偽造する可能性があるため、これは完全に信頼できる方法ではありません。
  • 同一オリジン ポリシー: Web ブラウザは同一オリジン ポリシーを実装して、クロスドメイン要求を制限します。したがって、クロスサイト リクエスト フォージェリのリスクを軽減するために、機密性の高い操作には特定のドメインまたはサブドメインからのみアクセスできるようにしてください。

8. Spring Boot 構成ファイルの形式は何ですか? それらの違いは何ですか?

.properties主にと形式があります.ymlが、主な違いは記述形式です。さらに、.yml この形式は@PropertySource注釈インポート構成をサポートしていません。

9.Spring Boot は古い Spring プロジェクトと互換性がありますか?

互換性を保つために、@ImportResource アノテーションを使用して古い Spring プロジェクト構成ファイルをインポートします。

10.Spring Boot 設定の読み込み順序をどのように理解していますか?

Spring Boot 設定の読み込み順序の優先順位は、プロパティ ファイル、YAML ファイル、システム環境変数、コマンド ライン パラメーターです。

11.Spring Boot はどの組み込み Web コンテナをサポートしていますか?

トムキャット、ジェッティ、アンダートウ。

おすすめ

転載: blog.csdn.net/qq_42785250/article/details/133000545