。
<bean>を定義する際には、そのbeanのスコープを宣言するオプションがあります。 例えば、新しいBeanインスタンスが必要になるたびにSpringに生成させるには、そのBeanのscope属性をprototypeと宣言します。
Spring Frameworkは以下の5つのスコープをサポートしていますが、そのうち3つはWeb対応のApplicationContextを使用した場合にのみ利用可能です。
singleton
Spring IoCコンテナごとに単一のインスタンスにBean定義をスコープします(デフォルト)。
prototype
単一のBean定義を任意の数のオブジェクト・インスタンスにスコープします。
request
Bean定義をHTTPリクエストにスコープします。
session
これはHTTPセッションにビーンの定義を適用します。
global-session
ビーン定義をグローバルなHTTPセッションに適用します。
この章では、最初の2つのスコープについて説明し、残りの3つについては、Web対応のSpring ApplicationContextについて説明します。
シングルトンスコープ
スコープがシングルトンに設定されている場合、Spring IoCコンテナはそのBean定義で定義されたオブジェクトのインスタンスを1つだけ作成します。 この1つのインスタンスは、そのようなシングルトンBeanのキャッシュに格納され、その名前のBeanに対するその後のすべての要求や参照は、キャッシュされたオブジェクトを返します。
デフォルトのスコープは常にシングルトンです。
デフォルトのスコープは常にシングルトンですが、ビーンのインスタンスが1つだけ必要な場合は、ビーン構成ファイルでスコープ・プロパティをシングルトンに設定できます。
<!-- A bean definition with singleton scope --><bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --></bean>
Example
Eclipse IDEを使用して、以下の手順でSpringアプリケーションを作成します。
Steps | Description |
---|---|
1 | SpringExampleという名前のプロジェクトを作成し、srcフォルダの下にcom.tutorialspointというパッケージを作成します。 |
2 | Spring Hello World Exampleの章で説明したように、Add External JARsオプションを使用して必要なSpringライブラリを追加します。 |
3 | JavaクラスHelloWorldとMainAppをcom.tutorialspointパッケージの下に作成します。 |
Beansの設定ファイルBeans.xmlをsrcフォルダの下に作成します。xmlを作成します。 | |
5 | 最後のステップは、すべてのJavaファイルとBean Configurationファイルのコンテンツを作成し、以下に説明するようにアプリケーションを実行します。 |
HelloWorld.javaファイルの内容は以下の通りです –
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
MainApp.javaファイルの内容は以下の通りです。javaファイル –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
以下はシングルトンスコープに必要な設定ファイルBeans.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" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton"> </bean></beans>
ソースファイルとBean構成ファイルの作成が完了したら、アプリケーションを実行してみましょう。 アプリケーションに問題がなければ、次のようなメッセージが表示されます –
Your Message : I'm object AYour Message : I'm object A
プロトタイプスコープ
スコープがプロトタイプに設定されている場合、Spring IoCコンテナは、その特定のBeanに対するリクエストが行われるたびに、そのオブジェクトの新しいBeanインスタンスを作成します。 原則として、ステートフルなBeanにはprototypeスコープを、ステートレスなBeanにはsingletonスコープを使用します。
プロトタイプスコープを定義するには、Bean構成ファイルでscopeプロパティをprototypeに設定します。
<!-- A bean definition with prototype scope --><bean id = "..." class = "..." scope = "prototype"> <!-- collaborators and configuration for this bean go here --></bean>
Example
Eclipse IDEを起動して、以下の手順でSpringアプリケーションを作成します。
Steps | Description |
---|---|
1 | SpringExampleという名前のプロジェクトを作成し、srcフォルダの下にcom.tutorialspointというパッケージを作成します。 |
2 | Spring Hello World Exampleの章で説明したようにAdd External JARsオプションを使用して必要なSpringライブラリを追加します。 |
3 | JavaクラスHelloWorldとMainAppをcom.tutorialspointパッケージの下に作成します。 |
Beansの設定ファイルBeans.xmlをsrcフォルダの下に作成します。xmlを作成します。 | |
5 | 最後のステップは、すべてのJavaファイルとBean Configurationファイルのコンテンツを作成し、以下に説明するようにアプリケーションを実行します。 |
HelloWorld.javaファイルの内容は以下の通りです
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
MainApp.javaファイルの内容は以下の通りです。javaファイル –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
以下はプロトタイプスコープに必要な設定ファイルBeans.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-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype"> </bean></beans>
です。