1: コンセプト
Spring コンセプト: 既存技術をより実用的にする. 既存のフレームワーク技術を統合すること自体が寄せ集めである.
アドバンテージ:
1.Springはオープンソースで無料のフレームワーク、コンテナです
2. Spring は軽量のフレームワークであり、非侵入的です。
3. 制御 IoC の反転、ファセット指向の Aop
4. モノのサポート、フレームワークのサポート
一言で言えば、Spring は軽量の Inversion of Control (IoC) および Aspect-Oriented (AOP) コンテナー (フレームワーク) です。
構成:
1.コアコンテナ(基本機能)
2. コンテキスト (構成ファイル)
3. AOP (アスペクト指向)
4.DAO(データベース操作)
5. ORM (オブジェクト・リレーショナル・マッピング、オブジェクト指向プログラミング言語で異なるタイプのシステムのデータ間の変換を実現するために使用)
6.ウェブ
7.MVC
2:IOC(支配の逆転、設計思想)
制御の反転は、記述 (XML または注釈) およびサード パーティを介して特定のオブジェクトを生成または取得する方法です。Springで制御の反転を実装するのがIoCコンテナで、その実装方法は依存性注入(Dependency Injection、DI)です。
簡単に言えば、オブジェクト作成の力とオブジェクトのライフサイクルの管理プロセスは Spring フレームワークによって処理され、それ以降、開発プロセスではオブジェクトの作成に注意を払う必要がなくなります。ライフサイクルの管理、ただし必要な場合はSpring.フレームワークによって提供される、Springフレームワークがオブジェクトの作成とライフサイクルを管理するこのメカニズムは、制御の反転と呼ばれます
利点:
1. リソースの集中管理により、リソースの構成可能で簡単な管理を実現
2.リソースの両側への依存度(カップリング)を減らしました
IOC がオブジェクトを作成する方法:
1. 引数なしの構築を使用してオブジェクトを作成する
<bean id="user" class="nuc.ss.pojo.User"> <property name="name" value="狂神"/> </bean>
2. パラメータ化された構築を使用してオブジェクトを作成する
1.添字代入
<bean id="user" class="nuc.ss.pojo.User"> <constructor-arg index="0" value="狂神说Java"/> </bean>
2. タイプ
<!--2 つのコンストラクタ、タイプがありますが、同じタイプは 1 つだけです。推奨されません--> <bean id="user" class="nuc.ss.pojo.User"> <constructor-arg type= " java.lang.String" value="狂った神"/> </bean>
3. パラメータ名
<!--パラメーター名を持つコンストラクター 3--> <bean id="user" class="nuc.ss.pojo.User"> <constructor-arg name="name" value="Mad God"/ > </豆>
概要: 構成ファイルがロードされたとき。その中で管理されているオブジェクトが初期化されました!
3: DI (依存性注入、コンテナが動的にコンポーネントに依存性を注入することで、IOC を実現する方法)
実現方法:
1. コンストラクター注入:
同上
2.セッターインジェクション(強調):
依存性注入:
依存関係: コンテナに依存する Bean オブジェクトの作成を指し、Bean オブジェクトの依存リソース。
インジェクション: Bean オブジェクトが依存するリソースを指し、コンテナによって設定およびアセンブルされます。
複合型 Address.java
実際のテスト オブジェクト Student.java
ビーンズ.xml
テストクラス
3. アノテーション注入
インジェクションにはpコマンドスペースとcコマンドスペースを使用できます
使用
注: p の名前付けと c の名前空間を直接使用することはできず、xml 制約を導入する必要があります。
xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
4:豆
Spring では、アプリケーションの本体を構成するものと、Spring IOC コンテナが管理するオブジェクトを Bean と呼びます。
1. 範囲:
- シングルトン モード (Spring のデフォルト メカニズム)
<bean id="user" class="nuc.ss.pojo.User" scope="singleton"/>
- プロトタイプ モード: コンテナから取得するたびに、現在のオブジェクトが生成されます!
<bean id="user" class="nuc.ss.pojo.User" scope="prototype"/>
- 残りのリクエスト、セッション、およびアプリケーションは、Web 開発でのみ使用できます
2.自動組立:
自動配線は、Spring が Bean の依存関係を満たす方法です
Spring はコンテキスト内で自動的にそれを探し、Bean のプロパティを自動的にアセンブルします!
要素の autowire 属性を使用して、Bean 定義の autowire モードを指定します
利点:
Autowiring は、<property> 要素と <constructor-arg> の構成を削減または排除するのに役立ち、XML 構成の数を削減します. もちろん、XML ファイルを記述する必要はないので、自然にはるかにリラックスできます.
自動配線モード
使用:
ID/名前による自動配線
byName: コンテナ コンテキストに自動的にソケットされ、独自のオブジェクトの set メソッドの背後にある値に対応する Bean id
テスト:
タイプ別自動組立
id/name オートワイヤーと比較して異なるのは、オートワイヤー パラメーターのみです。
byType: コンテナ コンテキストに自動的にソケットされ、独自のオブジェクト プロパティと同じタイプの Bean id
構築パラメータに基づく自動配線
テスト:
手動指定
テスト:
5: プロキシ モード
プロキシ モード (Proxy) は、プロキシ オブジェクトを介してターゲット オブジェクトにアクセスすることであり、ターゲット オブジェクトに基づいて追加の機能を拡張できます。つまり、ターゲット オブジェクトの機能を拡張できます。
1. 静的プロキシ:
インターフェース
本当の役割
エージェントの役割
静的プロキシ モードの利点:
- リアルキャラの操作をよりピュアに!一部の公共事業に注意を払う必要はありません
- 一般の方も代理でお譲り致します!分業化が実現!
- 公共事業が拡大した時、一元管理に便利!
欠点:
- 実際のキャラクターはプロキシ キャラクターを生成します。
- コード量が2倍になり、開発効率が低下する
2.jdk 動的プロキシ:
特徴:
1.プロキシオブジェクトはインターフェースを実装する必要はありません
2. プロキシ オブジェクトの生成は、JDK の API を使用してプロキシ オブジェクトをメモリ内に動的に構築することです (プロキシ オブジェクト/ターゲット オブジェクトを作成することによって実装されるインターフェイスのタイプを指定する必要があります)。
3. 動的プロキシは、JDK プロキシ、インターフェース プロキシとも呼ばれます。
インターフェース
本当の役割
プロキシ ロール (プロキシ クラス) とクライアント
動的プロキシの利点:
- リアルキャラの操作をよりピュアに!一部の公共事業に注意を払う必要はありません
- 一般の方も代理でお譲り致します!分業化が実現!
- 公共事業が拡大した時、一元管理に便利!
- 動的プロキシ クラスは、一般にビジネスの種類に対応するインターフェイスをプロキシします。
- 動的プロキシ クラスは、同じインターフェイスが実装されている限り、複数のクラスをプロキシできます [コア]
3. Cglib 動的プロキシ:
サブクラス プロキシとも呼ばれる Cglib プロキシは、メモリ内にサブクラス オブジェクトを構築して、ターゲット オブジェクトの機能を拡張します。
プロキシ ロール (プロキシ クラス) とクライアント
3 つの特徴:
1.静的プロキシ、プロキシされるオブジェクトはクラスに記述されている必要があり、1つのクラスしか処理できず、実行効率が高く、コードは高度に結合されており、再利用性が低い.
2. JDK 動的プロキシとは、プロキシ クラスが InvocationHandler インターフェイスを実装する必要があることを意味します。インターフェイスには (method.invoke(object, parameter) メソッドがあり、リフレクションを使用してプロキシ オブジェクトのメソッドを実行します。Java 動的プロキシは、 Proxy.newProxyInstance() メソッド プロキシ オブジェクトを動的に取得します。このメソッドには 3 つのパラメータがあります: (クラス ローダー、インターフェイス、InvocationHandler インターフェイスのサブクラス インスタンス); パラメータの 1 つはインターフェイスです。つまり、Java 動的プロキシは、インターフェースを実装するクラスのみをプロキシします。プロキシされるクラスがインターフェースを実装していない場合、JDK 動的プロキシを実装できません。
3. Cglib 動的プロキシは、インターフェイスを介した JDK 動的プロキシとは異なります. Cglib 動的プロキシは、サブクラス バイトコードを生成し、プロキシ クラスのメソッドを書き換え、書き換えられたメソッド内の関数を拡張することにより、継承によって実現されます. Cglib 動的プロキシは、Cglib 動的プロキシであるため、プロキシされたクラスを継承するため、final によって変更されたクラスまたはメソッドは Cglib 動的プロキシを実装できません。
6: AOP
1. AOP: アスペクト指向プログラミング、プログラミングのアイデア
2. 概要:
1. 分野横断的な懸念
どのメソッドを傍受し、傍受後にそれらをどのように処理するか、これらの懸念は分野横断的懸念と呼ばれます
2.アスペクト
クラスはオブジェクトの特性の抽象化であり、アスペクトは分野横断的な関心の抽象化です
3. ジョインポイント
Spring はメソッド タイプの接続ポイントのみをサポートするため、傍受されたポイント (Spring では、接続ポイントは傍受されたメソッドを参照します。実際、接続ポイントはフィールドまたはコンストラクターでもあります)
4.ポイントカット
ジョインポイントでのインターセプトの定義
5. 通知(アドバイス)
いわゆる通知とは、接続ポイントを傍受した後に実行されるコードを指し、通知は、事前通知、事後通知、例外通知、最終通知、およびサラウンド通知の 5 つのカテゴリに分類されます。
6. 対象者
プロキシ ターゲット
7.織り
アスペクトをターゲット オブジェクトに適用し、結果としてプロキシ オブジェクトを作成するプロセス
8.はじめに
コードを変更せずに、イントロダクションでいくつかのメソッドまたはフィールドを実行時にクラスに動的に追加できます
4. 実施方法
方法 1: Spring の API インターフェースを使用する [メインの Spring API インターフェースの実装]
まず、ビジネス インターフェイスと実装クラスを記述します。
拡張クラスを作成します。拡張前と拡張後の 2 つを記述します。
springファイルに登録、aopのカットイン実装、インポート制約に注意。
テスト
方法 2: カスタマイズして達成する
ターゲット ビジネス クラスは引き続き userServiceImpl です
独自のカットイン クラスを作成する
春に行って設定する
テスト
方法 3: アノテーションを使用して達成する!
アノテーション実装用の拡張クラスを作成する
Spring 構成ファイルで、Bean を登録し、アノテーションをサポートする構成を追加します。
利点:
デカップリング: 低結合と高凝集を実現
コードの再利用を実現し、利用効率を向上
セブン:総務
一般的に言えば、トランザクションはアトミック操作単位のグループです. データベースの観点からは, SQL 命令のグループです. それらのすべてが正常に実行されるか. 命令の 1 つの実行にエラーがある場合何らかの理由で、以前に実行されたすべての命令が取り消されます。より簡単な答えは、すべての実行が成功するか、キャンセルが実行されないかのどちらかです。
物の性質 (ACID):
原子性:物事の最小単位、分割は許可されていません
一貫性: トランザクションの実行前後で、データの一貫性が保たれます
分離: データベースに同時にアクセスする場合、ユーザーのトランザクションは他のものに干渉されず、同時実行データベースは独立しています
耐久性: トランザクションがコミットされた後は、何の影響も受けません。
取引タイプ:
1.JDBC トランザクション
2.JTA取引
3.コンテナ取引