DIの設定ファイルを書くには? | Java Springの逆引きメモ

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。

ここでは、SpringのDI設定ファイルの記述の仕方を簡単に見ていきます。


SpringのDIの設定ファイルはXML形式で書きます。

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 "
xmlns:util="http://www.springframework.org/schema/util "
xmlns:aop ="http://www.springframework.org/schema/aop "
xmlns:tx ="http://www.springframework.org/schema/tx "
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd ">



<!-- Beans -->
<bean id="locker" class="aop.lock.MixinLockerImpl" >

<property name="name" value="suzuki"/>

</bean>

</beans>



【説明】

XMLに詳しい方は、xmlns:xsi などの名前空間の設定は、上記の場合は意味が無いことが分かるかもしれないですね。(使用していないので)

ですが、ここではCopy&Pasteでほとんどのケースに対応できるように余分なものも記述しています。



<名前空間について>

一応、名前空間のそれぞれの意味を書いておきます。

名前空間 概要
空間名なし クラスの設定を記述するときに使用します。上記のbeanタグがそうです。
xmlns:util 定数やプロパティファイルの読み込みなどの設定を記述するときに使用します。
xmlns:aop AOPの設定を記述するときに使用します。
xmlns:tx トランザクションの設定を記述するときに使用します。




<beanタグについて>

beanは、初期値を設定されたクラスを表していると思ってください。

beanタグには属性があります。主に使用する属性を以下に示します。

属性名 概要
id

一意の名前をつけます。

プログラムからクラスを取得するときはこのid名で指定します。

class

このbeanで生成されるクラスを指定します。

パッケージ名を含むフルのクラス名を指定します。

name

bean名に特殊な記号を使用したい場合に使用します。

id属性は特殊な記号が使えないようになっています。

プログラムからは、id, nameのどちらかを指定してクラスを取得します。

scope

このbeanが生成される範囲(スコープ)。

設定されたbeanはプログラムからid名などで取得できます。

 例: appContext.getBean("locker");

このgetBean()を呼び出したときに、どのスコープでインスタンスを生成するかということです。

WEBにはスコープと言う概念が合りますが、それに近いものです。


【設定値】

・singleton ・・・どこでいつ取得しても同じインスタンスが返ります。

        (scopeのデフォルト値です)

・prototype・・・取得のたびに違うインスタンスが生成されます。
・request ・・・WEBのリクエストごとにインスタンスが生成されます。

・session ・・・WEBのセッションごとにインスタンスが生成されます。




<propertyタグについて>
beanタグの配下には、propertyタグを記述できます。

propertyタグは、beanを生成したときの初期値を設定するためのタグです。

実際には、クラスのsetterを呼び出しています。

上の例でいくと以下のようにするのと同じです。


タグ:
<bean id="locker" class="aop.lock.MixinLockerImpl" >

<property name="name" value="suzuki"/>

</bean>


Spring内部の処理の実際:

MixinLockerImpl locker = new MixinLockerImpl();

locker.setName("suzuki");


ちなみに、propertyタグでは、ref属性を使用して他のbeanを設定するのが普通です。

propertyタグの属性は以下のとおりです。

属性名 概要
name

プロパティ名(setter名)を記述します。

ref

他のbeanのidまたはnameを指定します。

指定されたbeanがこのクラスに設定されます。

value

文字列や数字を記述します。

内部では、クラスのsetterの引数の型になるべく変換するように努力しているようです。

例えば、setterの引数の型がClassの場合、文字列でパッケージを含むフルパスのクラス名で設定すると対象のクラスのClassを設定します。






【追加情報】

Spring IDEプラグインについてr

Springの設定ファイルをいじるときは、eclipseのプラグインをインストールしておくと便利です。

XMLファイル上で、Ctrl+Spaceを押すとタグを補完してくれます。

これによりあまりSpringの設定に詳しくない人もどんなタグを設定できるかが分かります。



インストール方法は、以下のとおりです。

①eclipseのヘルプ⇒ソフトウェア更新を開く

②使用可能なソフトウェアタブを開いて、「サイトの追加」ボタンを押す。

③以下のURLを入力して、OKを押せば、必要なプラグインをすべてインストールしてくれます。

 http://springide.org/updatesite/





参考:

・トップ

・DIの設定ファイルで外部ファイル(プロパティファイル)を参照するには?

・DIの設定ファイル内から外部DIファイルを参照するには?

・プロパティファイルをPropertiesクラスのbeanにするには?

・SpringJDBCの機能について

・DIxAOPの機能について

Strutsと連携するには?(理論編)

・MessageSourceを使いやすくするには?
Spring IDEを使ってみよう