春の一般的なインタビューの質問の要約(超詳細な回答を転載)

元のリンク:https//blog.csdn.net/a745233700/article/details/80959716

1.春とは?

        Springは軽量のIoCおよびAOPコンテナフレームワークです。これは、Javaアプリケーションの基本的なサービスを提供するフレームワークです。目的は、エンタープライズアプリケーションの開発を簡素化することであり、開発者はビジネスニーズのみを気にすることができます。一般的な構成方法には、XMLベースの構成、注釈ベースの構成、およびJavaベースの構成の3つがあります。

主に次のモジュールで構成されています。

Spring Core:IOCサービスを提供するコアクラスライブラリ。

Spring Context:フレームワークスタイルのBeanアクセスメソッドとエンタープライズレベルの関数(JNDI、時限タスクなど)を提供します。

Spring AOP:AOPサービス。

Spring DAO:データアクセス例外の処理を簡素化するJDBCの抽象化。

Spring ORM:既存のORMフレームワークのサポート。

Spring Web:マルチパーティファイルのアップロードなど、基本的なWeb指向の包括的な機能を提供します。

Spring MVC:WebアプリケーションにModel-View-Controller実装を提供します。

 

2. Springの利点は何ですか?

(1)Springは邪魔にならない設計であり、コード汚染が非常に少ない。

(2)SpringのDIメカニズムは、オブジェクト間の依存関係を処理のためにフレームワークに転送し、コンポーネントの結合を減らします。

(3)Springは、セキュリティ、トランザクション、ログ、アクセス許可などのいくつかの一般的なタスクの集中管理をサポートするAOPテクノロジーを提供し、より良い再利用を提供します。

(4)Springは、主流のアプリケーションフレームワークの統合サポートを提供します。

 

3. SpringのAOPの理解:

OOPはオブジェクト指向であり、開発者は垂直関係を定義できますが、水平関係の定義には適していません。これにより、コードが重複し、さまざまなモジュールの再利用が困難になります。

オブジェクト指向の補足として、一般にアスペクト指向と呼ばれるAOPは、ビジネスとは関係がないが複数のオブジェクトに影響を与える一般的な動作とロジックを抽出してカプセル化し、再利用可能なモジュールに使用します。このモジュールの名前は「アスペクト」です。これにより、システム内の反復コードが減少し、モジュール間の結合が減少し、システムの保守性が向上します。権限認証、ログ、およびトランザクション処理に使用できます。

AOPを実現するための鍵は、プロキシモードにあります。AOPプロキシは、主に静的プロキシと動的プロキシに分けられます。静的プロキシの代表はAspectJであり、動的プロキシの代表はSpringAOPです。

(1)AspectJは静的プロキシの拡張です。いわゆる静的プロキシとは、AOPフレームワークがコンパイルフェーズ中にAOPプロキシクラスを生成することを意味するため、コンパイル時の拡張とも呼ばれます。AspectJ(アスペクト)をに織り込みます。コンパイルフェーズ中のJavaバイトコードでは、実行時の拡張AOPオブジェクトです。

(2)Spring AOPで使用される動的プロキシいわゆる動的プロキシとは、AOPフレームワークがバイトコードを変更せず、実行するたびにメソッドのAOPオブジェクトをメモリ内に一時的に生成することを意味します。このAOPオブジェクトにはターゲットが含まれます。オブジェクト。特定の連絡先でのすべてのメソッド、拡張処理、および元のオブジェクトのコールバックメソッド。

Spring AOPの動的プロキシには、JDK動的プロキシとCGLIB動的プロキシの2つの主な方法があります。

        ①JDK動的プロキシはインターフェースプロキシのみを提供し、クラスプロキシはサポートしていません。コアのInvocationHandlerインターフェイスとProxyクラス。InvocationHandlerは、invoke()メソッドリフレクションを介してターゲットクラスのコードを呼び出し、横断的なロジックとビジネスを動的に組み合わせます。次に、ProxyはInvocationHandlerを使用して、特定のインターフェイスに準拠するインスタンスを動的に作成します。ターゲットクラスのプロキシオブジェクトを生成します。

        ②プロキシクラスがInvocationHandlerインターフェースを実装していない場合、SpringAOPはCGLIBを使用してターゲットクラスを動的にプロキシすることを選択します。CGLIB(コード生成ライブラリ)は、コード生成用のクラスライブラリであり、実行時に指定されたクラスのサブクラスオブジェクトを動的に生成し、特定のメソッドをカバーし、拡張コードを追加してAOPを実現できます。CGLIBは継承による動的プロキシであるため、クラスがfinalとしてマークされている場合、CGLIBを動的プロキシとして使用することはできません。

(3)静的プロキシと動的プロキシの違いは、AOPプロキシオブジェクトを生成するタイミングが異なることです。比較的、AspectJの静的プロキシメソッドの方がパフォーマンスは優れていますが、AspectJは処理に特定のコンパイラを必要としますが、SpringAOPは必要ありません。特定のコンパイルが必要です。

 InvocationHandlerのinvoke(Object proxy、Method method、Object [] args):proxyは最終的に生成されたプロキシインスタンスです。methodはプロキシターゲットインスタンスの特定のメソッドです。argsはプロキシターゲットインスタンスのメソッドの特定の入力パラメータです。Usedメソッドがリフレクションによって呼び出されたとき。

 

4. SpringのIoCの理解:

(1)IOCは制御の反転であり、オブジェクトを作成するための制御権の転送を指します。オブジェクトの作成のイニシアチブとタイミングは、以前はそれ自体で制御されていましたが、現在、この電力はSpringコンテナに転送されます。 、およびコンテナは構成に従って構成されます。ファイルはインスタンスを作成し、各インスタンス間の依存関係を管理するために使用されます。オブジェクト間の疎結合は、関数の再利用にも役立ちます。DIの依存性注入と制御の反転は、異なる観点からの同じ概念の説明です。つまり、アプリケーションはIoCコンテナーに依存して、実行時にオブジェクトに必要な外部リソースを動的に注入します。

(2)最も直感的な表現は、IOCを使用すると、新しいオブジェクトに移動することなくオブジェクトを作成でき、Javaのリフレクションメカニズムを使用して、実行時に構成ファイルに従ってオブジェクトを動的に作成および管理し、Springによって自動的に作成できることです。オブジェクトメソッドを呼び出します。

(3)SpringのIOCには、コンストラクターインジェクション、セッターメソッドインジェクション、アノテーションインジェクションの3つのインジェクションメソッドがあります。

IoCは、協調コンポーネントを疎結合に保ちますが、AOPプログラミングでは、アプリケーションのすべてのレイヤーに分散している関数を分離して、再利用可能な関数型コンポーネントを形成できます。

 

5. BeanFactoryとApplicationContextの違いは何ですか?

        BeanFactoryとApplicationContextはSpringの2つのコア・インターフェースであり、どちらもSpringコンテナーとして使用できます。ApplicationContextは、BeanFactoryのサブインターフェースです。

(1)BeanFactory:Springの最下位レベルのインターフェースであり、さまざまなBeanの定義が含まれ、Bean構成ドキュメントを読み取り、Beanのロードとインスタンス化を管理し、Beanのライフサイクルを制御し、Bean間の依存関係を維持します。BeanFactoryの派生物として、ApplicationContextインターフェースは、BeanFactoryの機能を提供するだけでなく、より完全なフレームワーク機能も提供します。

①MessageSourceを継承するため、国際化をサポートします。

②リソースファイルへの均一なアクセス。

③リスナーにBeanを登録するためのイベントを提供します。

④複数の設定ファイルを同時にロードします。

⑤複数の(継承された)コンテキストをロードして、各コンテキストがアプリケーションのWebレイヤーなどの特定のレベルに焦点を合わせるようにします。

(2)BeanFactroyは遅延読み込みを使用してBeanを注入します。つまり、Beanが使用されている場合(getBean()を呼び出す)にのみ、Beanが読み込まれてインスタンス化されます。このように、いくつかの既存のSpring構成の問題を見つけることができません。Beanの特定の属性が注入されていない場合、BeanFacotryがロードされた後、getBeanメソッドが最初に使用されるまで例外はスローされません。

        ②ApplicationContext。コンテナの起動時にすべてのBeanを一度に作成します。このようにして、コンテナーの起動時に、Springで構成エラーを見つけることができます。これは、依存プロパティが注入されているかどうかを確認するのに役立ちます。ApplicationContextの開始後、すべてのシングルインスタンスBeanがプリロードされます。シングルインスタンスBeanをプリロードすることで、必要なときに、すでに作成されているために待つ必要がないようにすることができます。

        ③基本的なBeanFactoryと比較して、ApplicationContextの唯一の欠点はメモリスペースです。アプリケーションにさらに多くのBeanがある場合、プログラムの起動は遅くなります。

(3)BeanFactoryは通常プログラムで作成されますが、ApplicationContextは、ContextLoaderを使用するなど、宣言的な方法で作成することもできます。

(4)BeanFactoryとApplicationContextはどちらもBeanPostProcessorとBeanFactoryPostProcessorの使用をサポートしていますが、両者の違いは次のとおりです。BeanFactoryは手動登録が必要ですが、ApplicationContextは自動的に登録されます。

 

6. SpringBeanのライフサイクルについて教えてください。

 まず、サーブレットのライフサイクルについて説明します。インスタンス化、初期初期化、リクエストサービスの受信、破棄の破棄。

 SpringコンテキストでのBeanのライフサイクルは、次のように似ています。

(1)Beanのインスタンス化:

BeanFactoryコンテナーの場合、クライアントがコンテナーに初期化されていないBeanを要求するか、Beanの初期化時に別の初期化されていない依存関係を注入する必要がある場合、コンテナーはインスタンス化のためにcreateBeanを呼び出します。ApplicationContextコンテナーの場合、コンテナーが開始されると、BeanDefinitionオブジェクトの情報を取得することによってすべてのBeanがインスタンス化されます。

(2)オブジェクトプロパティの設定(依存性注入):

インスタンス化されたオブジェクトはBeanWrapperオブジェクトにカプセル化され、SpringはBeanDefinitionの情報とBeanWrapperによって提供される属性設定インターフェースに基づいて依存性注入を完了します。

(3)Awareインターフェースの処理:

次に、Springは、オブジェクトがxxxAwareインターフェースを実装しているかどうかを検出し、関連するxxxAwareインスタンスをBeanに挿入します。

①このBeanがBeanNameAwareインターフェースを実装している場合、それによって実装されたsetBeanName(String beanId)メソッドが呼び出され、ここに渡されるのはSpring構成ファイル内のBeanのID値です。

②このBeanがBeanFactoryAwareインターフェースを実装している場合、それによって実装されたsetBeanFactory()メソッドが呼び出され、Springファクトリ自体を渡します。

③このBeanがApplicationContextAwareインターフェースを実装している場合、setApplicationContext(ApplicationContext)メソッドを呼び出し、Springコンテキストを渡します。

(4)BeanPostProcessor:

Beanでカスタム処理を実行する場合は、BeanにBeanPostProcessorインターフェースを実装させることができます。このインターフェースは、postProcessBeforeInitialization(Object obj、String s)メソッドを呼び出します。

(5)InitializingBean与init-method:

BeanがSpring構成ファイルのinit-method属性で構成されている場合、構成された初期化メソッドが自動的に呼び出されます。

(6)BeanがBeanPostProcessorインターフェースを実装している場合、postProcessAfterInitialization(Object obj、String s)メソッドが呼び出されます。このメソッドはBeanの初期化の最後に呼び出されるため、メモリーまたはキャッシングテクノロジーに適用できます。

上記の手順が完了すると、Beanが正しく作成され、Beanを使用できるようになります。

(7)DisposableBean:

Beanが不要になると、クリーニングフェーズが実行されます。BeanがDisposableBeanインターフェースを実装している場合は、実装されているdestroy()メソッドを呼び出します。

(8)破壊方法:

最後に、destroy-method属性がこのBeanのSpring構成で構成されている場合、その構成されたdestroyメソッドが自動的に呼び出されます。

 

7.SpringでサポートされているいくつかのBeanの範囲を説明します。

Springコンテナ内のBeanは、次の5つの範囲に分けることができます。

(1)シングルトン:デフォルトでは、各コンテナーにはBeanインスタンスが1つだけあり、シングルトンモードはBeanFactory自体によって維持されます。

(2)プロトタイプ:各Beanリクエストのインスタンスを提供します。

(3)リクエスト:ネットワークリクエストごとにインスタンスを作成します。リクエストが完了すると、Beanは無効になり、ガベージコレクターによってリサイクルされます。

(4)セッション:リクエストスコープと同様に、各セッションにBeanのインスタンスがあることを確認します。セッションの有効期限が切れると、Beanは無効になります。

(5)グローバルセッション:グローバルスコープ、グローバルセッションはポートレットアプリケーションに関連しています。アプリケーションがポートレットコンテナで機能するようにデプロイされると、多くのポートレットが含まれます。すべてのポートレットがグローバルストレージ変数を共有することを宣言する場合は、グローバル変数をグローバルセッションに保存する必要があります。グローバルスコープは、サーブレットのセッションスコープと同じ効果があります。

 

8. SpringフレームワークのシングルトンBeanはスレッドセーフですか?

        Springフレームワークは、シングルトンBeanのマルチスレッドカプセル化を実行しません。シングルトンBeanのスレッドセーフと同時実行性の問題は、開発者が解決する必要があります。しかし実際には、ほとんどのSpring Beanには可変状態(ServiewクラスやDAOクラスなど)がないため、ある程度、SpringシングルトンBeanはスレッドセーフです。Beanに複数の状態(ビューモデルオブジェクトなど)がある場合は、スレッドセーフを自分で確認する必要があります。最も明白な解決策は、多型Beanのスコープを「シングルトン」から「プロトタイプ」に変更することです。

9. Springはスレッドの並行性をどのように処理しますか?

一般に、マルチスレッド環境で共有できるのはステートレスBeanのみです。SpringではThreadLocalを使用して一部のBeanの非スレッドセーフ状態を処理するため、SpringではほとんどのBeanをシングルトンスコープとして宣言できます。スレッドセーフの問題を解決します。

ThreadLocalとスレッド同期メカニズムはどちらも、複数のスレッドで同じ変数のアクセス競合の問題を解決するためのものです。同期メカニズムは「スペースの時間」アプローチを採用し、1つの変数のみを提供します。異なるスレッドはアクセスする前にロックを取得する必要があり、ロックを取得していないスレッドはキューに入れる必要があります。そして、ThreadLocalは「時間のためのスペース」アプローチを使用します。

ThreadLocalは、スレッドごとに独立した変数コピーを提供するため、複数のスレッドのデータアクセスの競合を分離できます。各スレッドには変数の独自のコピーがあるため、変数を同期する必要はありません。ThreadLocalは、スレッドセーフな共有オブジェクトを提供します。マルチスレッドコードを作成する場合、安全でない変数をThreadLocalにカプセル化できます。

 

10-1、Springにはxmlに基づいてBeanを注入するいくつかの方法があります。

(1)メソッド注入を設定します。

(2)コンストラクタインジェクション:①インデックスを介してパラメータの位置を設定します。②タイプを介してパラメータタイプを設定します。

(3)静的ファクトリインジェクション。

(4)工場の例;

詳細は読むことができます:https://blog.csdn.net/a745233700/article/details/89307518

10-2、Springの自動アセンブリ:

春には、オブジェクトはそれ自体に関連付けられた他のオブジェクトを検索または作成する必要はありません。コンテナは、相互に連携する必要のあるオブジェクトへの参照を割り当てる役割を果たし、autowireを使用して自動ロードモードを構成します。

Spring Framework xml構成には、次の5種類の自動アセンブリがあります。

(1)いいえ:デフォルトの方法は自動アセンブリを実行しないことであり、Beanはref属性を手動で設定することによってアセンブルされます。

(2)byName:Beanの名前を使用して自動アセンブリが実行されます。あるBeanのプロパティが別のBeanの名前と同じである場合、自動アセンブリが実行されます。 

(3)byType:パラメータのデータ型による自動アセンブリ。

(4)コンストラクター:コンストラクターを使用してアセンブルし、コンストラクターのパラメーターはbyTypeを介してアセンブルされます。

(5)自動検出:自動検出。構築方法がある場合は、構築によって自動的にアセンブルされます。それ以外の場合は、byTypeによって自動的にアセンブルされます。

注釈ベースの方法:

@Autowiredアノテーションを使用して、指定したBeanを自動的にアセンブルします。@Autowiredアノテーションを使用する前に、Spring構成ファイル<context:annotation-config />で構成する必要があります。Spring IoCが開始されると、コンテナはAutowiredAnnotationBeanPostProcessorポストプロセッサを自動的にロードします。コンテナが@ Autowied、@ Resource、または@Injectをスキャンすると、IoCコンテナで必要なBeanが自動的に検出され、オブジェクトのプロパティにアセンブルされます。@Autowiredを使用する場合は、最初にコンテナ内の対応するタイプのBeanをクエリします。

クエリ結果が1つだけの場合、Beanは@Autowiredで指定されたデータにアセンブルされます。

クエリの結果が複数ある場合、@ Autowiredは名前で検索します。

上記の検索結果が空の場合、例外がスローされます。解決するときは、required = falseを使用します。

@Autowiredは、コンストラクター、メンバー変数、Setterメソッドに使用できます。

注:@Autowiredと@Resourceの違い

(1)@Autowiredは、デフォルトでタイプアセンブリによって注入されます。デフォルトでは、依存オブジェクトが存在する必要があります(required属性をfalseに設定できます)。

(2)@Resourceは、デフォルトで名前に従ってインジェクションをアセンブルします。名前に一致するBeanが見つからない場合にのみ、インジェクションはタイプに従ってアセンブルされます。

 

11. Springフレームワークではどのようなデザインパターンが使用されていますか?

(1)ファクトリモデル:BeanFactoryは、オブジェクトのインスタンスを作成するために使用される単純なファクトリモデルの実施形態です。

(2)シングルトンモード:Beanのデフォルトはシングルトンモードです。

(3)プロキシモード:SpringのAOP関数は、JDKの動的プロキシとCGLIBバイトコード生成テクノロジーを使用します。

(4)テンプレート方式:コード重複の問題を解決するために使用されます。例:RestTemplate、JmsTemplate、JpaTemplate。

(5)オブザーバーモード:オブジェクトキーへの1対多の依存関係を定義します。オブジェクトの状態が変化すると、Springでのリスナーの実装など、オブジェクトに依存するすべてのオブジェクトが通知され、ブレーキによって更新されます-ApplicationListener 。

 

12. Springトランザクションの実装方法と原則:

Springトランザクションの本質は、実際にはデータベースによるトランザクションのサポートです。データベーストランザクションのサポートがないと、Springはトランザクション機能を提供できません。データベース層の実際のトランザクションのコミットとロールバックは、binlogまたはREDOログを介して実行されます。

(1)Springトランザクションの種類:

Springは、プログラムによるトランザクション管理と宣言型のトランザクション管理を2つの方法でサポートしています。

①プログラムによるトランザクション管理はTransactionTemplateを使用します。

②宣言型トランザクション管理はAOPに基づいています。その本質は、AOP関数を介してメソッドの前後でメソッドをインターセプトし、トランザクション処理関数をインターセプトメソッドに織り込むこと、つまり、ターゲットメソッドが開始する前にトランザクションを追加し、実行に応じてトランザクションを送信またはロールバックすることです。ターゲットメソッドが実行された後。

宣言型トランザクションの最大の利点は、ビジネスロジックコードにトランザクション管理コードを追加する必要がないことです。トランザクションルールをビジネスロジックに適用するには、構成ファイルまたは@Transactionalアノテーションを介して関連するトランザクションルール宣言を行うだけです。 。

宣言型トランザクション管理は、プログラムによるトランザクション管理よりも優れています。これは、Springが提唱する非侵入型の開発方法であるため、ビジネスコードが汚染されることはなく、アノテーションを追加することで完全なトランザクションサポートを取得できます。唯一の欠点は、最も細かい粒度をメソッドレベルにのみ適用でき、プログラムトランザクションのようにコードブロックレベルに適用できないことです。

(2)Springのトランザクション伝播動作:

Springトランザクションの伝播動作とは、複数のトランザクションが同時に存在する場合に、Springがこれらのトランザクションを処理する方法の動作を指します。

①PROPAGATION_REQUIRED:現在トランザクションがない場合は、新しいトランザクションを作成します。トランザクションがある場合は、トランザクションに参加します。この設定は、最も一般的に使用される設定です。

②PROPAGATION_SUPPORTS:現在のトランザクションをサポートします。トランザクションがある場合はトランザクションに参加します。トランザクションがない場合は非トランザクションとして実行されます。'

③PROPAGATION_MANDATORY:現在のトランザクションをサポートします。トランザクションがある場合はトランザクションに参加します。トランザクションがない場合は例外がスローされます。

④PROPAGATION_REQUIRES_NEW:トランザクションが現在存在するかどうかに関係なく、新しいトランザクションを作成します。新しいトランザクションを作成します。

⑤PROPAGATION_NOT_SUPPORTED:非トランザクション方式で操作を実行します。現在トランザクションがある場合、現在のトランザクションは一時停止されます。

⑥PROPAGATION_NEVER:非トランザクション方式で実行します。現在トランザクションがある場合は、例外がスローされます。

ʻPROPAGATION_NESTED:トランザクションが現在存在する場合、ネストされたトランザクションで実行されます。現在トランザクションがない場合は、REQUIRED属性に従って実行されます。

(3)春の分離レベル:

①ISOLATION_DEFAULT:これは、データベースのデフォルトのトランザクション分離レベルを使用した、PlatfromTransactionManagerのデフォルトの分離レベルです。

②ISOLATION_READ_UNCOMMITTED:コミットされていないものを読み取り、別のトランザクションがこのトランザクションのコミットされていないデータを表示できるようにします。

③ISOLATION_READ_COMMITTED:読み取りがコミットされ、あるトランザクションによって変更されたデータが送信された後にのみ別のトランザクションによって読み取られるようになり、既存のレコードに対するトランザクションの更新を確認できます。

④ISOLATION_REPEATABLE_READ:繰り返し読み取り。あるトランザクションで変更されたデータは、送信後に別のトランザクションで読み取ることができますが、トランザクションの既存のレコードへの更新は表示されません。

⑤ISOLATION_SERIALIZABLE:トランザクションの実行中、他のトランザクションによって行われたデータベースへの更新はまったく表示されません。

 

13. Springフレームワークのさまざまなタイプのイベントは何ですか?

Springは、次の5つの標準イベントを提供します。

(1)コンテキスト更新イベント(ContextRefreshedEvent):ConfigurableApplicationContextインターフェイスのrefresh()メソッドが呼び出されたときにトリガーされます。

(2)ContextStartedEvent:このイベントは、コンテナーがConfigurableApplicationContextのStart()メソッドを呼び出してコンテナーを開始/再起動したときにトリガーされます。

(3)ContextStoppedEvent:このイベントは、コンテナーがConfigurableApplicationContextのStop()メソッドを呼び出してコンテナーを停止したときにトリガーされます。

(4)ContextClosedEvent:このイベントは、ApplicationContextが閉じられたときにトリガーされます。コンテナが閉じられると、コンテナによって管理されているすべてのシングルトンBeanが破棄されます。

(5)RequestHandledEvent:Webアプリケーションでは、このイベントはhttpリクエスト(リクエスト)が終了したときにトリガーされます。

BeanがApplicationListenerインターフェースを実装している場合、ApplicationEventが公開されるとBeanに自動的に通知されます。

 

14. SpringAOPのいくつかの用語を説明します。

(1)アスペクト:抽出された共通モジュールは、複数のオブジェクトにまたがる可能性があります。Spring AOPでは、アスペクトは共通クラス(パターンベースのスタイル)または共通クラスの@AspectJアノテーションを使用して実装できます。

(2)ジョインポイント:メソッドを参照します。SpringAOPでは、ジョインポイントは常にメソッドの実行を表します。 

(3)アドバイス:アスペクトの特定のジョインポイントで実行されるアクション。通知には、「周辺」、「前」、「後」など、さまざまな種類があります。Springを含む多くのAOPフレームワークは、通知モデルとしてインターセプターを使用し、接続ポイントを中心としたインターセプターのチェーンを維持します。

(4)ポイントカット:ポイントカットとは、インターセプトするジョインポイントの定義を指します。エントリポイント式を使用して、インターセプトadd *、search *の指定など、インターセプト方法を指定します。

(5)はじめに:(型間宣言とも呼ばれます)。特定のタイプの追加のメソッドまたはフィールドを宣言します。Springを使用すると、プロキシされる任意のオブジェクトに新しいインターフェイス(および対応する実装)を導入できます。たとえば、インポートを使用してBeanにIsModifiedインターフェースを実装させ、キャッシュメカニズムを簡素化できます。

(6)ターゲットオブジェクト:1つまたは複数の側面によってアドバイスされるオブジェクト。一部の人々はそれをアドバイスされたオブジェクトと呼びます。Spring AOPはランタイムプロキシを介して実装されるため、このオブジェクトは常にプロキシされたオブジェクトです。

(7)ウィービング:ターゲットオブジェクトに拡張機能を適用して、新しいプロキシオブジェクトを作成するプロセスを指します。春は実行時に織り込まれています。

ポイントカットとジョインポイントのマッチングの概念はAOPの鍵であり、これによりAOPは、傍受機能のみを提供する他の古いテクノロジーとは異なります。エントリポイントは、OOレベルに依存しないポジショニングアドバイス(アドバイス)を作成します。たとえば、宣言型トランザクション管理を提供するアラウンドアドバイスは、複数のオブジェクト(サービス層のすべてのビジネスオペレーションなど)にまたがる一連のメソッドに適用できます。

15. Spring通知の種類は何ですか?

https://blog.csdn.net/qq_32331073/article/details/80596084

(1)アドバイス前:ジョインポイントの前に実行される通知ですが、この通知は、(例外をスローしない限り)ジョインポイントの前の実行を防ぐことはできません。

(2)アドバイスを返した後:ジョインポイントが正常に完了した後に実行される通知:たとえば、メソッドは例外をスローせず、正常に戻ります。 

(3)アドバイスをスローした後:例外をスローしてメソッドが終了したときに実行されるアドバイス。 

(4)(最終的に)アドバイス後:接続ポイントが終了したときに実行される通知(正常な復帰または異常な終了に関係なく)。 

(5)アラウンドアドバイス:メソッド呼び出しなど、ジョインポイントを取り巻くアドバイス。これは最も強力なタイプの通知です。サラウンド通知は、メソッド呼び出しの前後にカスタム動作を完了することができます。また、接続ポイントの実行を続行するか、独自の戻り値を直接返すか、例外をスローして実行を終了するかを選択します。サラウンド通知は、最も一般的に使用されるタイプの通知です。NanningやJBoss4などのほとんどのインターセプトベースのAOPフレームワークは、サラウンド通知のみを提供します。 

同じ側​​面、異なるアドバイスの実行順序:

①異常状態のない実行シーケンス:

アドバイス前アドバイス

ターゲットメソッド执行
アドバイス
後アドバイス後
帰り

②異常状態での実行シーケンス:

アラウンドアドバイスビフォアアドバイスビフォア
アドバイス
ターゲットメソッド実行
アラウンドアフターアドバイス
アフターアドバイス
afterThrowing:例外が発生しました
java.lang.RuntimeException:例外が発生しました

 

関連資料:

SpringMVCの一般的な面接の質問の要約(超詳細な回答)

春の一般的な面接の質問の要約(超詳細な回答)

Mybatisの一般的なインタビューの質問の要約

おすすめ

転載: blog.csdn.net/qq_30764991/article/details/100936321