/* * Copyright 2004-2006 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.container; /** * コンポーネントのインスタンスをどのように管理するのかを定義します。diconファイルのcomponentタグのinstance属性に指定します。コンポーネントインスタンス定義の種類は「singleton」、「prototype」、「application」、「request」、「session」、「outer」があります。 *
*
singleton(default)
*
{@link S2Container#getComponent(Object)}を何度呼び出しても同じインスタンスが返されます。
*
prototype
*
{@link S2Container#getComponent(Object)}を呼び出すたびに新たなインスタンスが返されます。
*
application
*
{@link javax.servlet.Servlet}を使う場合は、{@link javax.servlet.ServletContext}毎に1つのインスタンスが作成されます。diconファイルのcomponentタグのname属性に指定した名前で、コンポーネントが{@link javax.servlet.ServletContext}に格納されます。applicationを使う場合は、{@link org.seasar.framework.container.filter.S2ContainerFilter}を設定する必要があります。
*
request
*
リクエスト毎に1つのインスタンスが作成されます。diconファイルのcomponentタグのname属性に指定した名前で、コンポーネントがリクエストに格納されます。requestを使う場合は、{@link org.seasar.framework.container.filter.S2ContainerFilter}を設定する必要があります。
*
session
*
セッション毎に1つのインスタンスが作成されます。diconファイルのcomponentタグのname属性に指定した名前で、コンポーネントがセッションに格納されます。sessionを使う場合は、{@link org.seasar.framework.container.filter.S2ContainerFilter}を設定する必要があります。
*
outer
*
コンポーネントのインスタンスは、{@link S2Container}外で作成し、DIだけを行ないます。アスペクト、コンストラクタ・インジェクションは適用できません。
*
* * @author higa * @author goto(Javadoc) */ public interface InstanceDef { /** * コンポーネントインスタンス定義「singleton」を表す定数です。 */ String SINGLETON_NAME = "singleton"; /** * コンポーネントインスタンス定義「prototype」を表す定数です。 */ String PROTOTYPE_NAME = "prototype"; /** * コンポーネントインスタンス定義「application」を表す定数です。 */ String APPLICATION_NAME = "application"; /** * コンポーネントインスタンス定義「request」を表す定数です。 */ String REQUEST_NAME = "request"; /** * コンポーネントインスタンス定義「session」を表す定数です。 */ String SESSION_NAME = "session"; /** * コンポーネントインスタンス定義「outer」を表す定数です。 */ String OUTER_NAME = "outer"; /** * コンポーネントインスタンス定義を返します。 * * @return コンポーネントインスタンス定義 */ String getName(); /** * コンポーネントインスタンス定義に基づいた{@link ComponentDeployer}を返します。 * * @param componentDef * コンポーネント定義 * @return コンポーネントの生成やDIを行なうオブジェクト */ ComponentDeployer createComponentDeployer(ComponentDef componentDef); }