Spring – 豆知識 Bean Scopes

Advertisement

<bean>を定義する際には、そのbeanのスコープを宣言するオプションがあります。 例えば、新しいBeanインスタンスが必要になるたびにSpringに生成させるには、そのBeanのscope属性をprototypeと宣言します。

Spring Frameworkは以下の5つのスコープをサポートしていますが、そのうち3つはWeb対応のApplicationContextを使用した場合にのみ利用可能です。

スコープ & 説明 1

singleton

Spring IoCコンテナごとに単一のインスタンスにBean定義をスコープします(デフォルト)。

2

prototype

単一のBean定義を任意の数のオブジェクト・インスタンスにスコープします。

3

request

Bean定義をHTTPリクエストにスコープします。

4

session

これはHTTPセッションにビーンの定義を適用します。 5

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アプリケーションを作成します。

4

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アプリケーションを作成します。

4

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>

です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です