2008年07月02日

3.2. Basics - containers and beans

3.2 IoCの基本−コンテナとBean
Springではアプリケーションの根幹を成し、Spring IoCコンテナによって管理されるオブジェクトをBeanと呼びます。BeanはSpring IoCコンテナによってインスタンス化され組み合わせられ、また管理されるオブジェクトであるというだけで、他に何も特別なことはありません(他に強いてあげるなら、あなたが関わっているアプリケーションを構成するクラスのうちのひとつである、ということくらいでしょうか)。これらのBeanとその間の依存性は、コンテナが使用する設定メタデータに反映されます。

原文:http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-basics

3.2.1. The container

3.2.1 コンテナ
org.springframework.beans.factory.BeanFactoryは、前述のBeanを制御・管理するSpring IoCコンテナの実体をなすものです。

BeanFactoryインタフェースはIoCコンテナインタフェースの中心的なインタフェースです。このインタフェースの役割は、アプリケーションオブジェクトを生成・取得しそれを設定し依存関係を構築することです。

そのままで使用できるBeanFactoryインタフェースの実装が数多く提供されていますが、最も一般的に使用されるのはXmlBeanFactoryクラスでしょう。このクラスを使用することによって、アプリケーションを構成するオブジェクトの宣言と、そのオブジェクト間の依存関係をXMLによって設定することができます。XmlBeanFactoryはXMLによる設定メタデータ使用して全体の設定を行い、システムやアプリケーションを作り上げるのです。

[図:SpringのIoCコンテナ]


なぜBeanという名前を使うのか?

「コンポーネント」や「オブジェクト」を使用せずにわざわざ「Bean」という名前を採用した背景は、Spring Frameworkの起源に根ざしています(というのも、Spring Frameworkは複雑なEnterprise Java Bean に対するひとつの回答として作成されたという一面があるのです)。


3.2.1.1 設定メタデータ
上掲の図からもわかるように、SpringのIoCコンテナは設定メタデータを使用します。設定メタデータは単に、アプリケーション開発者がコンテナに「どのように(アプリケーション中のオブジェクトを)生成・設定・構築するか」を伝えるための手段です。通常この設定メタデータはシンプルでわかりやすいXMLによって提供されます。XMLによる設定メタデータを使用する場合には、IoCコンテナの管理下におきたいビーンのためのビーン定義を記述して、コンテナにその仕事をさせるだけです。

※注
XMLベースの設定は設定メタデータのなかでも最もよく使用される形式です。しかしこの形式だけしか使用できないわけではありません。Spring IoCコンテナはどんな形式で設定メタデータが書かれているかに縛られることなく使用することができます。XML形式の設定メタデータは非常にシンプルであるため、この章ではSpring IoCコンテナのキーとなる概念について、XMLを用いて紹介しています。
XML以外の形式でのSpringコンテナの設定については、3.11節 「アノテーションによる設定」を参照してください。


ほとんどのアプリケーション開発においては、Spring IoCコンテナのインスタンス化のためのコードを明示的に書く必要はありません。たとえばWebアプリケーション開発のほとんどのケースでは、8行程度のお決まりのJ2EEウェブデスクリプタXMLをアプリケーションで使用するweb.xmlファイルに書くだけで事足りてしまいます(3.8.5項 「ウェブアプリケーションのための簡便なApplicationContextのインスタンス化」を参照してください)。

Springの設定は管理対象となるビーンの定義を最低ひとつ持っています(複数になる場合がほとんどでしょう)。XMLを利用する場合にはこのビーン定義はトップレベルの<beans/>要素に囲まれた<bean/>要素によって設定されます。

ビーン定義はアプリケーションを構成する実際のオブジェクトに対応しています。ビーン定義は通常サービス層のオブジェクト、データアクセスオブジェクト(DAO)、StrutsのActionのようなプレゼンテーションオブジェクト、HibernateのSessionFactoryのような基盤オブジェクト、JMSのキューといったオブジェクトのために定義されます。一方、粒度の細かいドメインオブジェクトがコンテナ中で設定されることは稀です。なぜならドメインオブジェクトの保存やロードはDAOやビジネスロジックの責任範囲であるからです。

XMLによる設定メタデータの基本的な構造を例示します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>

<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>

<!-- more bean definitions go here -->

</beans>




リソース

ApplicationContextのコンストラクタに渡されるパスは、リソースの位置を示す文字列です。これによってコンテナはJavaのCLASSPATH以下にあるローカルファイルシステムなど、さまざまな外部リソースから設定メタデータを読み込むことができます。

Spring IoCコンテナについて理解したのちに、Springのリソースの概要についてより詳しく知りたい場合は第4章 「リソース」の記述を参照してください。


原文:http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory

2008年07月04日

3.2.2. Instantiating a container

3.2.2 コンテナのインスタンス化
Spring IoCコンテナのインスタンス化手順はいたって単純です。

ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});

// an ApplicationContext is also a BeanFactory (via inheritance)
BeanFactory factory = context;


3.2.2.1 XMLによる設定メタデータを組み合わせる
コンテナ定義を複数のXMLファイルに分割して使用することは利益をもたらす場合があります。複数ファイルに分割されたApplicationContextをロードする際には、複数のリソースパスを受け取るApplicationContextのコンストラクタを使用します。BeanFactoryは複数のビーン定義を順に読み込んでいきます。

一般的な場合にはこの方法を使用することをお勧めします。なぜかといえばコンテナ設定ファイルから、他のファイルとの関連を取り除くことができるからです。しかしながら<import/>要素をひとつまたは複数使用することで他のファイルからビーン定義を読み込むこともできます。以下がサンプルです。


<beans>

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

</beans>


この例では3つの外部ファイル(services.xml、messageSource.xml、themeSource.xml)からビーン定義が読み込まれています。これらのファイルの場所は、インポートを記述しているファイルからの相対パスと解釈されます。したがってこのケースではservices.xmlではこのファイルと同じディレクトリになければならず、またmessageSource.xmlとthemeSource.xmlはこのファイルがあるディレクトリ以下のresourcesディレクトリの中に配置されていなければなりません。先頭のスラッシュは無視されますが、相対パスとして扱われることを表すことができるため、スラッシュを使用しないよりはベターな形式かもしれません。インポートされるファイルはSpringのスキーマもしくはDTDに準拠した妥当なXMLによる(トップレベル要素として<:bean/%gt;要素を持った)ビーン定義ファイルでなければなりません。
※注
相対パスにおいて「../」を使用して親ディレクトリを参照させることは可能ですが、アプリケーションの外側のファイルに依存することになるため推奨されていません。特に「classpath:」URL(たとえば「classpath:../services.xml」)は実行時のパス解決が「最も近い」クラスパスルートを使用して親ディレクトリを参照しようとするためお勧めできません。これはクラスパスの変更によって今までと異なるディレクトリが使用される可能性があり、ひ弱なアプリケーションになってしまいます。
また相対ではなく絶対パスによる指定(たとえば「file:C:/config/services.xml」や「classpath:/config/services.html」)をすることもできますが、その場合にはアプリケーションの設定ファイルがその特定のパスに固定されてしまうことに注意してください。一般的には、たとえば実行時のJVMのシステムプロパティーによって解決される「${...}」プレースホルダを使用するなど、絶対パスを使用する際には何らかの対応をするほうが良いでしょう。



原文:http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-instantiation

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。