A、スプリングフレームワークは、豆を理解しました
1.1、ものの範囲内のSpring Bean?
- シングルトン:単一のBeanインスタンスのスプリングBeanは、単一のデフォルトの実施形態です。
- プロトタイプ:新しいBeanインスタンスを作成するためのすべての要求。
- リクエスト:各HTTP要求は、現在のHTTPリクエストでのみ有効である新しいbeanを生成します。
- セッション:各HTTPリクエストは、現在のHTTPセッションでのみ有効である新しいbeanを生成します。
1.2、コンポーネントと@Bean @の違い
異なる(1)オブジェクトの役割:クラススコープのプロセスにおいて@Component注釈注釈役割@Bean
(2)作用の異なる方法が:@Componentはで注釈クラス走査経路自動的に検出し、自動的にスプリング嵌め込ま; @ Bean
@注釈通常、豆で定義された注釈の生成方法を標識されたBean
特定のクラス春と言わたとえば、あなたがそれを必要とするとき私を与えます
(3)@ Bean
注釈@割合は、 Component
より多くのカスタマイズ注釈を:春に嵌合したときに、クラス@サードパーティのライブラリが必要な場合にのみ使用することができますBean
注:@ ComponentScan
注釈を定義しますが、クラスのアイデンティティを見つけるためにスキャンするパスは、Spring Beanコンテナの中にアセンブリ自動組立が必要です
//比如在SpringBoot启动类中,这样使用将扫描范围扩大到整个父包
@ComponentScan(“com.xxx.xx.springboot”)
@SpringBootApplication
public class SpringbootIn10StepsApplication {
...
}
1.3、何の春Beanの注釈のためのクラス宣言?
使用@一般的なAutowired
注釈Beanをオートワイヤリングは、@クラスに識別したいAutowired
注釈は以下を使用して実装することができる、自動組立注釈付きBeanクラス:
@Component
:一般的な注釈は、注釈は、任意のタイプとすることができるSpring
コンポーネント。ビーンが属する層がわからない場合は、使用することができます@Component
注釈ラベルを。@Repository
:層に対応ダオすなわち永続層は、主にデータベース関連の操作に使用します。@Service
:主に関連するサービス層に対応し、複雑なロジック、ダオ層を使用する必要があります。@Controller
:春MVCは、制御層に対応する、プライマリユーザがユーザの要求を受け付け、通話サービス層のフロントページにデータを返します。
1.4、ライフサイクルでのSpring Bean
推奨読書:https://www.cnblogs.com/zrtqsk/p/3735273.html
二、デザインモードで使用されているSpringフレームワーク
推奨読書:接続
-
工場のデザインパターン :春の工場出荷時のパターンを使用して
BeanFactory
、ApplicationContext
Beanオブジェクトを作成します。 -
プロキシデザインパターン :春AOP機能を実装。
-
シングルトンデザインパターン :豆春はデフォルトの単一例です。
-
テンプレート方法 :春に
jdbcTemplate
、hibernateTemplate
またはクラステンプレートのデータベース操作の終了までのように、彼らはテンプレートをモデル化するために使用されています。 -
包装デザインパターン :複数のデータベースを接続するために私たちのプロジェクトの必要性、および異なる顧客がアクセス異なるデータベースへの各訪問必要に応じうとして。このモデルは、私たちは、動的に顧客の需要に応じて異なるデータソースを切り替えることができます。
-
Observerパターン: 春のイベント駆動型モデルは、古典的なアプリケーションのObserverパターンです。
-
アダプタモード :アダプタモードを使用する春AOPの強化または通知(助言)、スプリングMVCはまた、アダプタモード適応に使用されます
Controller
。
2.1、春工場パターン
スプリングは、工場のパターンで使用することができる BeanFactory
か、 ApplicationContext
Beanオブジェクトを作成します
両者の(1)の比較:
BeanFactory
:遅れ移植(豆を用いたものを注入する場合)、より少ないメモリは、高速たBeanFactory占有より開始します。
ApplicationContext
:使用にかかわらず、無用のコンテナが起動中に注入すると、使い捨てよります、すべてのBeanを作成しBeanFactory
、より一般的に使用されます。
三つのカテゴリーの(2)のApplicationContext実現:
-
ClassPathXmlApplication
:コンテキスト・クラスパスリソースとしてドキュメント。 -
FileSystemXmlApplication
:ファイルシステムのXMLファイルのコンテキスト定義情報が格納されます。 -
XmlWebApplicationContext
:XMLファイル内のWebシステムからの読み込みコンテキスト定義情報。
2.2、春シングルトン
スレッドプール、キャッシュ、レジストリ、ログオブジェクト:ようなシステムで唯一のいくつかのオブジェクト、。
豆のスプリングデフォルトスコープシングルトンは、単一の実施形態です。
(二種類)のばね単一の実装例:
-
XML:<ビーンID = "UserServiceの" クラス= "top.snailclimb.UserService" スコープ= "シングルトン" />
-
注意:
@Scope(value = "singleton")
原則:
ばねによってConcurrentHashMap
単レジストリ実施形態の方法は以下のように、シングルモードの実施形態は、コアコードは:
// 通过 ConcurrentHashMap(线程安全) 实现单例注册表
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);
public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) {
Assert.notNull(beanName, "'beanName' must not be null");
synchronized (this.singletonObjects) {
// 检查缓存中是否存在实例
Object singletonObject = this.singletonObjects.get(beanName);
if (singletonObject == null) {
//...省略了很多代码
try {
singletonObject = singletonFactory.getObject();
}
//...省略了很多代码
// 如果实例对象在不存在,我们注册到单例注册表中。
addSingleton(beanName, singletonObject);
}
return (singletonObject != NULL_OBJECT ? singletonObject : null);
}
}
//将对象添加到单例注册表
protected void addSingleton(String beanName, Object singletonObject) {
synchronized (this.singletonObjects) {
this.singletonObjects.put(beanName, (singletonObject != null ? singletonObject : NULL_OBJECT));
}
}
}
2.3、春プロキシモード
SpringAOPは、これらのサービスとは独立して、順番に共通の呼サービスモジュールカプセル化するためのロジック(トランザクション処理、ログ管理、アクセス制御)の欠如は、コードが保守、カップリング、高いスケーラビリティを低減低減することができます。AOPは基づいている動的なエージェントの。
2.4、春テンプレートメソッドパターン
テンプレートメソッドはサブクラスにいくつかのステップを延期、骨格算術演算を定義し、サブクラスが再定義するアルゴリズムのいくつかのステップのようなアルゴリズム構造を変更することはできません。
春JdbcTemplate、hibernateTemplate
またはテンプレートの終わりまでのようなベースのデータベース操作は、この方法は、テンプレートパターンを使用することです。
2.5、春オブザーバーモード(パブリッシュ-サブスクライブ)
これは、オブジェクトやオブジェクト、オブジェクトが依存オブジェクトが応答する変更オブジェクト間の依存関係を表しています。
春イベント駆動型モデルは、アプリケーションオブザーバのクラシックモードであります
プロセスでの春の時間:
(1)イベントを定義
(2)イベントリスナーを定義します
(3)発表されたイベント発行を使用して
2.6、の春アダプタモード
アダプタモード(アダプタ)は、クライアントが期待する別のインターフェースへのインターフェースであり、これらのクラスのインタフェースアダプタは、ワークと互換性がありません
(1)アダプタモードでSpringAOP
知っAOPの実装は、プロキシモードに基づいていますが、AOPの内側にある強化または通知(アドバイス)アダプタモードを使用します
アダプタモード(2)SpringMVC
春MVCにおいて、DispatcherServlet
要求情報を呼び出すために記載する HandlerMapping,
要求に対応する構文解析 ハンドラの後、プロセスはHandlerAdapterアダプタ開始しますHandler。解析到对应的
なぜアダプタモードでのSpring MVCを使用できますか?
多くの種において、コントローラSpringMVC、その後、アダプタモードを使用していない場合はリクエストの異なる種類が、異なる方法にコントローラによって処理され、DispatcherServlet
コントローラの対応するタイプへの直接アクセスは、独自の判断を必要とします。
2.7、春Decoratorパターン
あなたは、動的に、ある程度の量のオブジェクトや行動に継承よりも柔軟なプロパティを追加することができます。私たちは、元の関数は、元のコードを修正して喜んではありません変更する必要がある場合には、デザインは、元のコードでデコレータを設定します。
JDKにおける種々のストリームは、(入力ストリームを使用しますFileInputStream
、BufferedInputStream
)
スプリング構成データソース、データソースは、Decoratorパターンを使用して、異なるデータベースとデータ・ソースとすることができる場合、少なくともための顧客の需要に応じて、既存のコードを変更することができ、データ・ソースを切り替える動的、スプリングラッパーにまたはデコレータを終了基本的に動的ギブを追加の責任を追加するオブジェクト。
三、春のもの
3.1、いくつかの方法で物事の管理に春
(1)プログラムもの:コードでハードコードされた(推奨)。
(2)宣言型のもの:設定ファイルの設定(推奨) -二つに分け
- XMLベースの宣言型のもの。
- ベースの宣言型のものの注釈。
分離レベル3.2、物事の春
TransactionDefinition インタフェース5は、分離レベルを定義し表す定数
(データベースのデフォルトの分離レベルを使用して)(1)TransactionDefinition.ISOLATION_DEFAULT
使用MySQLのREPEATABLE_READデフォルトの分離レベル、READ_COMMITTED分離レベルのOracleのデフォルト
(2)TransactionDefinition.ISOLATION_READ_UNCOMMITTED(最低の分離レベル) - コミットされていない読み取り
まだ可能性があり、データを読み取ることができる読み取り、ファントム読み取り、反復不能読み取り汚れにつながります
(3)TransactionDefinition.ISOLATION_READ_COMMITTED - Oracleのデフォルト- 読み取りコミット
すでに提出同時読み取りデータ項目を許可、ダーティー読み取り防ぐが、ファントムは読み込み、非反復がまだ発生読み込むことができます。
(4)TransactionDefinition.ISOLATION_REPEATABLE_READ - MySQLのデフォルト- 反復可能読み取り
繰り返し(自体に変更の事がない限り)同じ結果を読んで、同じフィールドでは、あなたはファントム読み取りがまだ発生する可能性があり、汚れ読み込み、非反復可能読み取りを防ぐことができます
(5)TransactionDefinition.ISOLATION_SERIALIZABLE(分離の最高レベル) - シリアライズ
すべての物事の実装に続いて、完全なコンプライアンスACID分離レベル、防止のダーティリード、反復不能読み取り、ファントム読み取り。しかし、パフォーマンスが良くありません一般的に使用されていません
注:MySQLとOracleのデフォルトの分離レベルは同じではありません
参考:「春インサイド」