ホームページ >Java >&#&チュートリアル >Spring IOC容器
1. Spring Framework の概要
Spring とは?
Spring は、エンタープライズレベルのアプリケーション開発を簡素化し、侵入を軽減することを目的としたオープンソースの軽量アプリケーション開発フレームワークです
Spring IOC および AOP によって提供されています。アプリケーションはコンポーネントの結合、つまりデカップリングを最小限に抑えて、将来のシステムのメンテナンスとアップグレードを容易にすることができます
Spring はシステムの全体的なソリューションを提供し、開発者はそれ自体が提供する機能を使用できます。アプリケーションはサードパーティと統合することもできます。 -パーティのフレームワークとテクノロジーを自由に選択でき、開発に使用するテクノロジーを自由に選択できます
2. コンテナとBeanの管理
Springコンテナの紹介
Springでは、JavaクラスとJavaBeanはBeanとして扱われます。これらの Bean はコンテナを通じて管理および適用されます
Spring コンテナは IOC および AOP メカニズムを実装しており、Bean オブジェクトの作成と Bean オブジェクト間の分離を簡素化できます
Spring コンテナには BeanFactory と ApplicationContext の 2 つのタイプがあります
(javaBean とは: シンプルで標準化された Java オブジェクト。Spring を使用する場合: JavaBean オブジェクトを管理する必要がある場合に使用できます。Spring は最も単純なオブジェクト管理ソリューションの 1 つです)
Spring コンテナーのインスタンス化
ApplicationContext は BeanFactory から継承します。このタイプのインスタンス化メソッドを使用することをお勧めします。
// ファイル システムに構成ファイルのインスタンス化をロードします。
String conf = "C:applicationContext.xml";
ApplicationContext ac = new FileSystemXmlApplicationContext(conf);
//プロジェクトのクラスパスの下に設定ファイルのインスタンスをロードします
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
Springコンテナの使用
本質的に、BeanFactory と ApplicationContext は、Bean 定義と相互依存関係を維持する高レベルのファクトリ インターフェイスにすぎません。 BeanFactory と ApplicationContext を通じて Bean 定義にアクセスできます。まず、コンテナ設定ファイル applicationContext に Bean 定義を追加します。ApplicationContext コンテナ オブジェクトの後に、getBean() メソッドを呼び出して Bean インスタンス [getBean("identifier")] を取得します。
Beanのインスタンス化
SpringコンテナがBeanオブジェクトを作成するには3つの方法があります:- コンストラクタを使用してインスタンスを作成します
-静的ファクトリメソッドを使用してインスタンス化
- インスタンス ファクトリ メソッドを使用してインスタンスを作成します
< Bean id = "calendarObj3" class = "java.util.GregorianCalendar"/>
Bean の名前付け
Bean 名:Spring コンテナでは、各 Bean に名前 (つまり、識別子) が必要です。
Bean エイリアス :
は定義された Bean であり、別の名前参照を追加します。
Bean スコープ:
Bean をインスタンス化するとき、Spring コンテナは各 Spring IOC コンテナ内に次のスコープの Bean オブジェクトを作成できます
1。シングルトン スコープ
Bean 定義は、オブジェクト インスタンス。デフォルトの構成インスタンスは次のとおりです:
2. プロトタイプ Bean 定義は複数のオブジェクト インスタンスに対応します 構成インスタンス:
or
3、request
request は、HTTP リクエストごとに新しい Bean が生成されることを意味し、Bean は現在の HTTP リクエスト内でのみ有効であり、リクエスト、セッション、およびグローバル セッションによって使用されます。 Web の場合は、まず Web で次の構成を行う必要があります:
Servlet2.4 より前の Web コンテナの場合は、javax.servlet.Filter の実装を使用する必要があります:
4, session
sessionスコープは、HTTP リクエストごとに新しい Bean が生成されることを意味し、Bean は現在の HTTP セッション内でのみ有効です (HTTPSession では、1 つの Bean 定義が 1 つのインスタンスに対応し、Web 環境内でのみ)
構成インスタンス:
前提条件はリクエスト構成インスタンスと同じです。Web 起動ファイルを構成した後、次のように構成できます:
グローバルHTTPSessionでは、Bean定義はポートレットベースのWebアプリケーションでのみ意味を持ちます。グローバルセッションの概念を定義します。インスタンス:
インスタンスの設定の前提は、Web 起動ファイルの設定後、次のように設定できます:
(上記のBeanスコープは
初期化コールバックメソッドを指定:
< ;/bean>
Bean にのみ適用できる破棄コールバック メソッドを指定しますシングルトンモード:
最上位の
最上位の
< /beans>
Bean の遅延インスタンス化
ApplicationContext に実装されたデフォルトの動作は、起動時にすべてのシングルトン Bean を事前にインスタンス化することです
ApplicationContext の初期化時にシングルトン Bean を事前にインスタンス化したくない場合は、
遅延初期化された Bean は、初めて使用されるときにインスタンス化されます
最上位の
Bean の依存関係を指定する
Bean が別の Bean に依存関係がある場合、
Bean が複数の Bean に依存関係がある場合、depends-on 属性は複数の Bean 名をカンマ区切りで指定します
3. コンテナ IOC アプリケーション
3.概念
IOC の正式名は Inversion of Control で、制御の反転と訳されます。
IOC は、プログラム内のオブジェクトの取得方法を、元の新しいメソッドから作成して注入する方法に戻すことを指します。サードパーティのフレームワーク。サードパーティのフレームワークは一般に、設定を通じてどの特定の実装を注入するかを指定し、それによってオブジェクト間の結合を減らします
IOCは、実装方法の違いに応じて依存関係注入DIと依存関係ルックアップに分けることができます
SpringコンテナはDIを使用する方法でIOC制御を実現します。 IOC は Spring コンテナの基盤であり、コアです。
DI の正式名は、依存性注入と訳されます。DI の基本原理は、連携して動作するメソッドを構築することです。接続を確立するためにパラメータまたはメソッドのパラメータが渡されるため、コンテナの仕事は Bean の作成時にそれらの依存関係を注入することです
IOC はアイデアであり、DI は IOC を実装する主な技術的方法ですDI には主に 2 つの方法がありますインジェクションメソッド、すなわち Setter インジェクションとコンストラクターインジェクションSetter インジェクション
パラメーターなしのコンストラクターまたはパラメーターなしの静的ファクトリ メソッドを呼び出して Bean をインスタンス化した後、Bean の setter メソッドを呼び出すと、セッター インジェクションを実現できます
public class JDBCDataSource{ private String driver;
public void setDriver(String driver){ try{ Class.forName(driver); this.driver = driver; }c catch(Exception e ) { throw new RuntimeException(e); } } //その他のコード.... } コンテナxml設定で、インジェクションパラメータを設定します< Bean ID = "dataSource" クラス = "org.dao.JDBCDataSource"> <プロパティ名 = "driver" 値 = "oracle.jdbc.OracleDriver"/> <プロパティ名 = "url" 値 = "jdbc.oracle:thin:@localhost:1521:XE"/>
コンストラクターインジェクション
コンストラクターベースのインジェクションは、Bean がインスタンス化されるときに、パラメーターの型に従って対応するコンストラクターを実行することで実現されます
public class OracleUserDAOimplements UserDAO{
private JDBCDataSource dataSource;
public OracleUserDAO(JDBCDataSource dataSource){
this.dataSource = dataSource;
}
//その他のコード...
}
コンストラクタパラメータインデックスでインジェクションを指定
Auto-wiring
Spring IOC コンテナは、連携する Bean 間の関連付けを自動的にアセンブル (オートワイヤ) できます。 Autowire は、単一の Bean に対して設定できます。 xmlxml 設定ファイルでは、属性値は no です。 デフォルト値は自動ワイヤリングを無効にします。
属性値は byName:プロパティ名に基づいて自動ワイヤリングします。このオプションはコンテナをチェックし、それに基づいてプロパティとまったく同じ Bean を見つけます。名前を指定し、自動的にプロパティに関連付けます
属性値は byType: コンテナ内に指定されたプロパティと同じタイプの Bean がある場合、そのプロパティを使用して自動的にアセンブルされます
属性値はconstructor:byTypeと似ていますが、違いはコンストラクターパラメータに適用されることです。
属性値はautodetect:Beanクラスによる自動アセンブリにコンストラクターを使用するかbyTypeメソッドを使用するかを決定します。デフォルトのコンストラクターが見つかった場合、byType メソッドが使用されます
設定例:上記の設定は、 UserServiceにUserDao型を受け取るSetterメソッドがあり、SpringはそれにuserDAOオブジェクトを自動的に注入できます
以上がSpring IOC容器の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。