記事のディレクトリ
- Spring Frameworkにはいくつのモジュールがあり、それらは何ですか?
- Springフレームワークを使用する利点は何ですか?
- Springフレームワークではどのようなデザインパターンが使用されていますか?
- Spring IoCコンテナとは何ですか?
- 依存性注入とは何ですか?
- IoCとDIの違いは何ですか?
- 依存性注入を完了するために使用できる方法はいくつありますか?
- 春には何種類のIoCコンテナがありますか?
- 一般的に使用されるBeanFactoryコンテナ
- 一般的に使用されるApplicationContextコンテナ?
- IoCのメリット
- IoCはどのように実装されていますか?
- SpringBeanとは
- Springにはどのような構成方法がありますか?
- Springは一元化されたBeanスコープをサポートしていますか?
- コンテナ内のSpringBeanのライフサイクルは?
- SpringBeanの破壊プロセス
- 春の内部豆とは何ですか?
- スプリングアセンブリとは何ですか?
- 自動組立の方法は何ですか?
- 遅延読み込み
- SpringFrameworkのシングルトンBeanはスレッドセーフですか?
- 春の豆は循環依存の問題をどのように解決しますか?
- AOPとは何ですか?
- アスペクトとは何ですか?
- ジョインポイントとは何ですか?
- ポイントカットとは何ですか?
- JoinPointとPointCutの違いは何ですか?
- アドバイスとは何ですか?
- どんなアドバイスがありますか
- トランザクションとは何ですか?
- トランザクションの特徴は何ですか?
- Springはどのような種類のトランザクションをサポートしていますか?
- Springトランザクションはどのように異なるデータ永続化レイヤーフレームワークと統合されますか?
Spring Frameworkにはいくつのモジュールがあり、それらは何ですか?
春のコアコンテナ:コアコンテナ
- SpringCore
- 春の豆
核心容器提供spring的基本功能。
核心容器的主要组件是BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转(IOC)模式将应用程序的配置
和依赖性规范与实际的应用程序代码分开
- 春のコンテキスト
spring上下文是一个配置文件,向spring框架提供上下文信息。
spring上下文包括企业服务。
例如:JNDI\EJB\电子邮件、国际化、事件机制、校验和调度功能
- 春のゲーム
全称为spring expression language,缩写为spel。
能够在运行时构建复杂表达式、存取对象图属性、对象方法调用等。
可以用来配置bean的定义
データアクセス:データアクセスの
このレイヤーは、データベースとの対話をサポートします。次のモジュールが含まれています。
- JDBC
- ヘビ
- OXM
用于将java对象和xml文件进行映射
- トランクション
事务管理:声明式事务和编程式事务
ウェブ
- WebMVC
MVC是一个全功能构建web应用程序的mvc实现。
通过策略接口,mvc框架变成高高度配置的,容纳了大量视图技术,其中包括JSP、Itext和POI
- WebFlux
- WebSocket
提供一个在web应用中实现高效、双向通讯,需考虑客户端和服务端之间高频和低延迟时信息交互的机制
一般的应用场景有:在线交易、网页聊天、游戏、协作、数据可视化等
構成管理機能を介したAOPにより、springaopモジュールはアスペクト指向プログラミング機能をSpringフレームワークに直接統合します。したがって、Springフレームワークによって管理されるオブジェクトにaop
spring aopモジュールをサポートさせて、Springベースのアプリケーションのオブジェクトにトランザクション管理サービスを提供することは簡単です。Spring aopを使用することで、EJBコンポーネントに依存することなく、宣言型トランザクション管理をアプリケーションに統合できます。
側面
インストルメンテーション
このレイヤーは、クラス検出とクラスローダーの実装をサポートします
その他
- JMS
- テスト
使用JUnit和TestNG进行测试支持
- メッセージング
该模块为STOMP提供支持,支持注解编程模型
Springフレームワークを使用する利点は何ですか?
利点
- DI:コンストラクタとJavabeansおよびプロパティファイル間の依存関係を一目で明確にします
- 軽量:EJBコンテナーと比較して、IoCコンテナーはより軽量になる傾向があります。その結果、IoCコンテナのメモリとCPUリソースは限られており、アプリケーションの開発と公開が非常に有利になります。
- アスペクト指向プログラミング(AOP):アスペクトプログラミングをサポートします。これにより、アプリケーションのビジネスロジックをシステムのサービスから同時に分離できます。
- 主流のフレームワークを統合します:ORMフレームワーク、ロギングフレームワーク、QuartzおよびJDKタイマー、その他のビューテクノロジーなど
- モジュール性:どのモジュールが属しているかを簡単に確認できるように、パッケージとクラスにちなんで名付けられました
- 便利なテスト:開発テスト用のテストクラスを提供します
- Webフレームワーク
- トランザクション管理:便利なトランザクション管理インターフェイスを提供します
- 例外処理
不利益
- 各フレームワークには問題があり、調整フェーズは直感的ではなく、問題はコンテナーによって決定されません。理解するには時間がかかります
- 多くの実装がカプセル化されています。迅速な開発の同僚のニーズを満たすために、実装は隠されています。その結果、多くのエンジニアは春を去った後の作業方法を知りません。
Springフレームワークではどのようなデザインパターンが使用されていますか?
- プロキシモード:aopとリモート処理でより多く使用されます
- シングルトンモード:Spring構成ファイルで定義されたBeanはデフォルトでシングルトンモードになります
- テンプレートメソッド:コードの重複の問題を解決するために使用されます。RestTemplate、JdbcTemplateなど
- フロントコントローラー:DispatcherServletはリクエストを配信するために提供されています
- ファクトリパターン:BeanFactoryはオブジェクトのインスタンスを作成するために使用されます
Spring IoCコンテナとは何ですか?
SpringのコアはSpringIoCコンテナーです。コンテナは、Beanオブジェクトを作成し、それらをアセンブルし、構成し、ライフサイクル全体を管理します。
- スプリングコンテナは、依存性注入を使用してアプリケーションのBeanオブジェクトを管理します
- コンテナーは、提供された構成メタデータBean定義を読み取ることにより、オブジェクトのインスタンス化、構成、およびアセンブリーの指示を受け入れます。
- 構成メタデータは、XML、Javaアノテーション、またはJava構成コードを介して提供できます。
依存性注入とは何ですか?
依存性注入では、オブジェクトをアクティブまたは手動で作成する必要はありませんが、オブジェクトの作成方法を説明する必要があります
IoCとDIの違いは何ですか?
IoCはより広い概念であり、DIはより具体的です。
これは、呼び出し元を呼び出し先から分離するという考えです。
依存性注入を完了するために使用できる方法はいくつありますか?
- インターフェース注入
- コンストラクター注入
- セッターインジェクション(もっと使用)
春には何種類のIoCコンテナがありますか?
BeanFactory:Beanのコレクションを含むファクトリクラスのようなトップレベルのデザインレイヤー。クライアントでBeanオブジェクトのインスタンス化を要求します
ApplicationContext:ユーザーインターフェイスレイヤー、BeanFactoryインターフェイスを継承し、その上にいくつかの追加機能を提供します
- MessageSource:メッセージの管理、国際化およびその他の機能の実現
- ApplicationEventPublisher:イベントの公開
- ResourcePatternResolver:マルチリソースの読み込み
- EnvironmentCapable:システムの環境変数に関連します
- ライフサイクル:ライフサイクルを管理する
- クローズ可能:リソースを閉じて解放します
- InitializingBean:カスタム初期化
- BeanNameAware:beanNameのAwareインターフェースを設定します
applicationContextは、遅延ロードされていないBeanオブジェクトを自動的に初期化します
2つの違い
BeanFacotry | ApplicationContext |
---|---|
遅延読み込み | 均等な負荷 |
構文表示はリソースオブジェクトを提供します | リソースオブジェクトを自分で作成および管理する |
国際化をサポートしていません | 国際化をサポートする |
依存関係ベースのアノテーションをサポートしていません | 依存関係ベースのアノテーションをサポート |
低レベルコンテナ | 高度なコンテナ |
一般的に使用されるBeanFactoryコンテナ
XmlBeanFactory:xmlファイルで定義されたコンテンツに基づいて応答Beanを作成します
一般的に使用されるApplicationContextコンテナ?
- ClassPathXmlAplicationContext:クラスパスのxml構成ファイルからコンテキストを読み取り、コンテキスト定義を生成します。
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
- FileSystemXmlApplicationContext:ファイルシステムのxml構成ファイルからコンテキストを読み取ります。
- XmlWebApplicationContext:Webアプリケーションのxmlファイルからコンテキストを読み取ります
- ConfigServletWebServerApplicationContext:コンテキストを取得するためのSpringBootの実装
IoCのメリット
- アプリケーション内のコードの量を最小限に抑える
- 最小限の影響と最小限の侵入メカニズムと疎結合
- Beanオブジェクトの即時インスタンス化と遅延読み込みをサポートします
- テストが簡単
IoCはどのように実装されていますか?
簡単に言えば、ファクトリーモード+リフレクションメカニズムの実現です
SpringBeanとは
- Beanは、Spring IoCコンテナーによってインスタンス化、構成、アセンブル、および管理されます。
- Beanは、ユーザーがIoCコンテナーに提供した構成メタデータBeanDefinitionに基づいて作成されます。
Springにはどのような構成方法がありますか?
- xml構成ファイル
- 注釈構成
- Java構成構成
Springは一元化されたBeanスコープをサポートしていますか?
- シングルトン:各SpringIoCコンテナには単一のBeanインスタンスが1つだけあります。デフォルトの割り当て
- プロトタイプ:各リクエストは新しいインスタンスを生成します
- リクエスト:すべてのHttpリクエストは新しいBeanインスタンスを生成し、インスタンスは現在のHttpリクエストでのみ有効です
- セッション:各セッションは新しいBeanインスタンスを生成し、Beanは現在のHttpセッションでのみ有効です。
- アプリケーション:各Webアプリケーションは新しいBeanを生成し、Beanは現在のWebアプリケーションでのみ有効です。
コンテナ内のSpringBeanのライフサイクルは?
SpringBeanの初期化プロセスは次のとおりです。
構成内のBean定義に従ってBeanオブジェクトSpringコンテナーをインスタンス化して、BeanオブジェクトSpringをインスタンス化し、
依存性注入を使用してすべての属性を埋めます
Bean Definition 可以通过 XML、java注解或java config代码提供
- Beanオブジェクトに注入されたアウェア関連の属性
2.1BeanがBeanNameAwareインターフェースを実装している場合、ファクトリは
BeanのBeanNameを渡すことによってsetBBeanName(String name)メソッドを呼び出します2.2 BeanがBeanFactoryAwareインターフェースを実装している場合、ファクトリは独自のインスタンスを渡しますsetBeanFactory(BeanFactory beanFactory)メソッドを呼び出す - 対応するメソッドを呼び出し、さらに、Beanオブジェクトの初期化に
豆に関連する任意のBeanPostProcessorがある場合は3.1、preProcessBeforeInitialization(オブジェクト・ビーン、文字列のbeanName)メソッドを呼び出す
3.2 BeanのInitializingBeanインタフェースを実装する場合、afterPropertiesSet()メソッドを呼び出す
場合は3.3 Bean Initメソッドに指定すると、このメソッドが呼び出されます
SpringBeanの破壊プロセス
- BeanがDisposableBeanインターフェースを実装している場合、Springコンテナーが閉じられると、destroy()メソッドが呼び出されます。
- Beanのdestroyメソッドを指定すると、呼び出されます
春の内部豆とは何ですか?
Beanが別のBeanの属性としてのみ使用されている場合にのみ、Beanを内部Beanとして宣言できます。
- Springは、で提供されるxmlベースの構成メタデータを提供します
- 内部Beanは常に匿名であり、常にプロトタイプとして使用されます
スプリングアセンブリとは何ですか?
豆がスプリングコンテナ内で結合される場合、それはアセンブリまたはBeanアセンブリと呼ばれます。スプリングコンテナは、必要なBeanと、コンテナがどのようにインジェクションを使用してBeanを結合し、Beanをアセンブリするかを知る必要があります。
自動組立の方法は何ですか?
SpringコンテナはBeanを自動的にアセンブルできます。つまり、SpringはbeanFactoryの内容をチェックすることでBeanの共同作業者を自動的に解決できます。自動組み立てのさまざまなモード:
- いいえ:デフォルト構成、自動アセンブリなし、アセンブリにdisplayBeanリファレンスを使用
- byName:Beanの名前に基づいてオブジェクトの依存関係を挿入します。これは、プロパティがxmlファイルで同じ名前で定義されているBeanと一致し、それらをアセンブルします。
- byType(一般的に使用):タイプに応じてオブジェクトの依存関係を挿入します。属性のタイプがxmlファイルのBeanタイプと一致する場合、一致します。
- コンストラクター:多数のパラメーターを持つクラスのコンストラクターを呼び出すことにより、依存性を注入します
- autodetect:最初にコンストラクターautowireを介してアセンブルを試みます。そうでない場合は、byTypeを介して自動的にアセンブルを試みます。
遅延読み込み
デフォルトでは、シングルトンスコープのすべてのBeanはコンテナの開始後に作成されますが、一部のシナリオは事前に作成する必要はありません。これは、Beanがlzay-init = "true"を設定できるため、作成されません。コンテナの起動時。、Beanを取得する必要があるときに作成されます。
SpringFrameworkのシングルトンBeanはスレッドセーフですか?
- 開発者が解決する必要があります
- シングルトンBeanがスレッドセーフであるかどうかは、Springの重要な懸念事項ではありません。Springは、構成に基づいてシングルトンBeanと複数のBeanを作成する機能を提供するだけで済みます。
- ほとんどのSpringBeanには変更可能な状態がないため、ある程度
スレッドセーフです。 - 複数の状態がある場合、最も簡単な解決策は、Beanの役割をプロトタイプに変更することです。
春の豆は循環依存の問題をどのように解決しますか?
3レベルのキャッシュたとえば
、次のような依存関係があります:A-> B-> C-> A
- まず、Aは初期化の最初のステップを完了し、事前にObjectFactoryを介して自分自身を公開します。初期化中に、彼はオブジェクトBに依存していることに気付きます。このとき、彼はget(B)を試みますが、Bは作成されません。
- その後、Bは初期段階に進み、Cに依存していることに気付き、Cも作成されませんでした。
- このとき、Cは再び初期化を開始しましたが、初期化プロセス中にAに依存していることがわかったため、get(A)を試しました。このとき、Aがキャッシュに追加された(通常は3番目に追加された)ためです。レベルキャッシュsingletonFactories)、ObjectFactory Exposureを介して進められるため、ObjectFactory#getObject()メソッドを介してAを取得できます。CがAオブジェクトを取得すると、スムーズに初期化され、最初のレベルのキャッシュに追加されます。
- BはCオブジェクトを取得して初期化を完了することもでき、AはBオブジェクトを取得して初期化を完了することもできます。この時点で、リンク全体が初期化されています。
AOPとは何ですか?
アスペクト指向プログラミング
アスペクトとは何ですか?
ポイントカットとアドバイスで構成
- クロスカットロジックの定義と接続ポイントの定義の両方が含まれています
- Spring aopは、アスペクトの実装を担当するフレームワークであり、アスペクトによって定義された横断的ロジックを、アスペクトによって指定された接続ポイントにコンパイルします。
AOPの作業の焦点は、ウィービングターゲットオブジェクトの接続ポイントを強化する方法です。2つのタスクがあります。 - PointCutとAdviceを介して特定のJoinPointを見つけた場合
- アドバイスでアスペクトコードを書く方法
ジョインポイントとは何ですか?
カットポイント、プログラム操作のいくつかの時点:
- メソッドの実行
- 例外処理
ポイントカットとは何ですか?
JoinPointの条件に一致します。
- アドバイスは特定のPointCutに関連付けられ、PointCutに一致するJoinPointで実行されます。両方のアドバイス=> PointCut => JoinPoint
- 春には、すべてのメソッドをJoinPointと見なすことができますが、すべてのメソッドにアドバイスを追加する必要はありません。PointCutの役割は、JoinPointに一致する一連のルールを提供し、ルールを満たすJointPointsにアドバイスを追加することです。
JoinPointとPointCutの違いは何ですか?
- Spring aopのすべての実行メソッドはjoinPointであり、PointCutは単なる説明情報であり、JoinPointを照合するために使用され、照合されたものをアドバイスに織り込みます。
- アドバイスはJoinPointで実行され、PointCutはどのJointPointがどのアドバイスを実行できるかを指定します
アドバイスとは何ですか?
- 特定のJointPointでアスペクトが実行するアクションはアドバイスと呼ばれます
- Spring AOPはAdviceをインターセプターとして使用し、JpinPointの周りに一連のインターセプターを維持します
どんなアドバイスがありますか
- 前
- 帰国後
- 投げた後
- 最後に
- 周り
トランザクションとは何ですか?
トランザクションは、一連のデータベース操作の統合されたコミットまたはロールバック操作です。挿入が成功した場合は、成功するか、一緒に失敗します。
トランザクションの特徴は何ですか?
酸:
- Atomicity:トランザクション内のすべての操作は、すべて成功するか、すべて失敗します。
- 一貫性:トランザクションの前後で、詩の叫びの完全性は破壊されていません。
- 分離:複数の同時トランザクションが同時に読み取りと変更を行えるようにします。分離により、複数のトランザクションが同時に実行される場合の相互実行によって引き起こされるトランザクションの不整合を防ぐことができます。トランザクション分離レベル:コミットされていない読み取り、コミットされた読み取り、繰り返し可能な読み取りおよびシリアル化
- 永続性:トランザクションが終了し、データベースが完全に削除され、ディスクバックアップが保存されます
Springはどのような種類のトランザクションをサポートしていますか?
- 宣言型トランザクション:注釈またはxmlベースの構成トランザクション、トランザクション管理、およびビジネスコードの分離
- プログラムによるトランザクション:トランザクション管理は、コーディング、およびコードに表示する必要のある呼び出し元のトランザクションの取得、送信、およびロールバックによって実現されます。
Springトランザクションはどのように異なるデータ永続化レイヤーフレームワークと統合されますか?
Springには、3つのメソッドしかないPlatformTransactionmanagerインターフェースクラスがあります
- getTransaction()
- コミット()
- ロールバック
すべての永続層フレームワークは、この春のインターフェースを実装します