Spring IOC容器

大家讲道理
大家讲道理オリジナル
2017-08-19 13:46:191543ブラウズ

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つの方法があります:

- コンストラクタを使用してインスタンスを作成します

(id または name 属性は Bean 名の指定に使用され、Bean の検索に使用されます) Spring の Bean オブジェクト。Bean タイプの指定にはクラスが使用され、オブジェクトの作成にはパラメーターなしのコンストラクターが自動的に呼び出されます)

-静的ファクトリメソッドを使用してインスタンス化

(id 属性は Bean 名の指定に使用され、class 属性はファクトリ タイプの指定に使用され、factory-method 属性はファクトリで Bean オブジェクトを作成するメソッドを指定するために使用されます。これは static で変更する必要があります)

- インスタンス ファクトリ メソッドを使用してインスタンスを作成します

< Bean id = "calendarObj3" class = "java.util.GregorianCalendar"/> (ID は Bean 名の指定に使用され、

(Spring にオブジェクト作成ルールを伝えると、Spring が作成を支援します)オブジェクト; 設定とデフォルトのルールに基づいて、コードの記述を削減します)

Bean の名前付け

Bean 名:

Spring コンテナでは、各 Bean に名前 (つまり、識別子) が必要です。 要素の id または name 属性を使用して指定できます。id 属性は name よりも厳密であり、一意性が必要であり、「/」などの特殊文字は使用できません。

Bean エイリアス :

は定義された Bean であり、別の名前参照を追加します。 を使用して

;

Bean スコープ:

Bean をインスタンス化するとき、Spring コンテナは各 Spring IOC コンテナ内に次のスコープの Bean オブジェクトを作成できます

1。シングルトン スコープ


Bean 定義は、オブジェクト インスタンス。デフォルトの構成インスタンスは次のとおりです:
または




2. プロトタイプ Bean 定義は複数のオブジェクト インスタンスに対応します 構成インスタンス:

< ;bean id=" role" class="spring.chapter2.maryGame.Role"scope="prototype"/>

or




3、request

request は、HTTP リクエストごとに新しい Bean が生成されることを意味し、Bean は現在の HTTP リクエスト内でのみ有効であり、リクエスト、セッション、およびグローバル セッションによって使用されます。 Web の場合は、まず Web で次の構成を行う必要があります: ...org.springframework.web.context.request.RequestContextListener...
Servlet2.4 より前の Web コンテナの場合は、javax.servlet.Filter の実装を使用する必要があります:
.. requestContextFilterorg.springframework.web.filter.RequestContextFilterフィルタマッピング> <フィルタ名>requestContextFilter /*次に、Bean のスコープを構成できます:



4, session


sessionスコープは、HTTP リクエストごとに新しい Bean が生成されることを意味し、Bean は現在の HTTP セッション内でのみ有効です (HTTPSession では、1 つの Bean 定義が 1 つのインスタンスに対応し、Web 環境内でのみ)
構成インスタンス:
前提条件はリクエスト構成インスタンスと同じです。Web 起動ファイルを構成した後、次のように構成できます:
5、グローバルセッション


グローバルHTTPSessionでは、Bean定義はポートレットベースのWebアプリケーションでのみ意味を持ちます。グローバルセッションの概念を定義します。インスタンス:
インスタンスの設定の前提は、Web 起動ファイルの設定後、次のように設定できます:


(上記のBeanスコープはで定義されたscope属性で指定可能) Beanライフサイクルコールバック



初期化コールバックメソッドを指定:

< ;/bean>

Bean にのみ適用できる破棄コールバック メソッドを指定しますシングルトンモード:

最上位の 要素内default-init-method 属性は、コンテナ内のすべての の初期化コールバック メソッドを指定できます

最上位の 要素のdefault-destroy-method 属性は、すべての の破棄コールバックを指定できます。 bean> コンテナ内のメソッド

< /beans>

Bean の遅延インスタンス化

ApplicationContext に実装されたデフォルトの動作は、起動時にすべてのシングルトン Bean を事前にインスタンス化することです

ApplicationContext の初期化時にシングルトン Bean を事前にインスタンス化したくない場合は、 要素を使用できます Lazy-init = "true" 属性が変更されます

遅延初期化された Bean は、初めて使用されるときにインスタンス化されます

最上位の 要素のdefault-lazy-init 属性は、コンテナ内のすべての に対して遅延インスタンス化機能を指定できます

Bean の依存関係を指定する

Bean が別の Bean に依存関係がある場合、 要素の depend-on 属性を使用して

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;

}

//その他のコード...

}

コンストラクタパラメータインデックスでインジェクションを指定

<プロパティ名 = "driver" 値 = "oracle.jdbc.OracleDriver"/>

<プロパティ名 = "url" 値 = "jdbc :oracle:thin:@localhost:1521:XE"/>

;

Auto-wiring

Spring IOC コンテナは、連携する Bean 間の関連付けを自動的にアセンブル (オートワイヤ) できます。 Autowire は、単一の Bean に対して設定できます。 xml

xml 設定ファイルでは、 要素の autowire 属性を使用して、合計 5 種類の値があります

属性値は no です。 デフォルト値は自動ワイヤリングを無効にします。

属性値は byName:プロパティ名に基づいて自動ワイヤリングします。このオプションはコンテナをチェックし、それに基づいてプロパティとまったく同じ Bean を見つけます。名前を指定し、自動的にプロパティに関連付けます

属性値は byType: コンテナ内に指定されたプロパティと同じタイプの Bean がある場合、そのプロパティを使用して自動的にアセンブルされます

属性値はconstructor:byTypeと似ていますが、違いはコンストラクターパラメータに適用されることです。

属性値はautodetect:Beanクラスによる自動アセンブリにコンストラクターを使用するかbyTypeメソッドを使用するかを決定します。デフォルトのコンストラクターが見つかった場合、byType メソッドが使用されます

設定例:

上記の設定は、 UserServiceにUserDao型を受け取るSetterメソッドがあり、SpringはそれにuserDAOオブジェクトを自動的に注入できます


以上がSpring IOC容器の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。