Springメモ
提供: Astarisk Works Wiki
Spring Frameworkのメモを書いておく。
目次 |
beanタグによるBeanの登録
Springの基本。
applicationContext.xmlにひとつずつ次の様に定義する。
<bean id="target" class="sample.bean.Target" scope="prototype" />
この例はsample.bean.Targetというクラスをtargetという名前で登録している。 scopeというのはインスタンスのライフサイクル管理の指定で、次の種類がある。
| Scope | 説明 |
|---|---|
| singleton | アプリケーションの開始から終了までのスコープ。つまり、アプリケーション内で一つしかインスタンスが作られない。 |
| prototype | 取得されるたびに新しいインスタンスを生成するスコープ。 |
| request | Servlet APIにおけるrequestスコープ。webアプリケーションでのみ利用できる。 |
| session | Servlet APIにおけるsessionスコープ。webアプリケーションでのみ利用できる。 |
| globalSession | Portlet APIにおけるグローバルセッションスコープ |
もともとscopeはsingletonとprototypeの概念しかなかったが、Spring2からWebアプリケーションの作成に便利なスコープが追加された。
requestとsessionを利用するにはweb.xmlに次の設定が必要。
<web-app>
...
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>
依存性の注入
アノテーションによるBeanの登録
beanタグを使って一つずつ定義していけばいいのだが、たとえばStrutsなんかでActionをSpringを使って管理したいときにいちいち登録するのは面倒になる。
で、アノテーションを使ってコンポーネントを自動検出する方法がある。
まず、applicationContext.xmlにはcontext:component-scanタグを指定してコンポーネントの自動検出をするパッケージを指定する。
<context:component-scan base-package="example.bean" />
これでexample.beanパッケージが自動検出対象のパッケージとして指定される。
次に、beanクラスにアノテーションを追加する。
たとえばTargetクラスを登録するには@Componentアノテーションをつける。これで名前が"target"、scopeがprototypeのbeanとして登録される。
@Component
public class Target {
…省略
}
スコープも指定したい場合には@Scopeアノテーションもつける。また、@Componentアノテーションでbeanの名前を指定することもできる。
次の例はTargetクラスをmyTargetという名前のprototypeスコープのbeanとする場合。
@Component("myTarget")
@Scope("prototype")
public class Target {
…省略
}
さて、ここまでで、 <bean id="target" class="sample.bean.Target" scope="prototype" />というbeanタグによる定義と同等となった。
まとめると、
- context:component-scanタグをapplicationContext.xmlに記述してコンポーネントを自動検出するパッケージを指定する。
- 自動検出されbean登録されたいクラスに@Componentと@Scopeアノテーションを追加する。
さらに
デフォルトでは@Component, @Repository, @Serviceまたは @Controllerアノテーションがついたクラスが自動的に検出される。しかし、これも指定するのが面倒。