[Seasar-user:5279] Re: S2Container を利用した実行クラスについて

Junichi Kato [E-MAIL ADDRESS DELETED]
2006年 11月 26日 (日) 18:20:45 JST


加藤です。

はじめまして、
私の知識も、まだまだなのですが、以下に参考になる情報を書きます。

Webアプリケーションでは、わざわざ自分でS2のContainerを作らなくても、
以下の方法でS2Containerを作る方法があります。

http://s2container.seasar.org/ja/DIContainer.html#S2ContainerServlet

この設定を行い、

app.diconファイルなどに、EmployeeDao.diconがインクルードされるようにしてください。
(その他、S2Daoに必要なdicon定義も適切に含まれるようにします)
その上で、EmployeeManagerも、diconファイルに定義してください。

public class EmployeeManager {

	// S2ContainerServletによってDIされます。
	private EmployeeDao employeeDao;
	public setEmployeeDao(EmployeeDao employeeDao){
		this.employeeDao = employeeDao;
	}

	public List selectEmployeeInfo(int empno){
		return this.employeeDao.findById(empno);
	}
}

strutsのアクションクラスで、EmployeeManagerを取得したい場合は、以下のようにすれば取得できるかと思います。

public class HogehogeAction extends Action {

	public ActionForward execute(ActionMapping map, ActionForm frm, HttpServletRequest request,
HttpServletResponse response) {
		// S2ContainerServletからS2Containerを取り出す
		S2Container s2Container = S2ContainerServlet.getContainer();
		// EmployeeManagerを取り出す
		EmployeeManager employeeManager =
			(EmployeeManager)s2Container.getComponent(EmployeeManager.class);
		// 以下、省略
	}
}

S2Strutsは使ったことがないのですが、以下のようなPOJOのアクションにして、diconに登録しておけば、
EmployeeManager自体も、用意したセッターでDIされるようになると思います。

public class HogehogeAcitonImpl implements HogehogeAction {

	// DIされます。
	public void setEmployeeManager(EmployeeManager employeeManager){
		this.employeeManager = employeeManager;
	}

	public String doFugafuga(){
		List list = this.employeeManager.selectEmployeeInfo(1);
		// ... 省略
		return "success";
	}

}

たぶん、こんな感じでいけると思います。

-- 
Junichi Kato <[E-MAIL ADDRESS DELETED]>




Seasar-user メーリングリストの案内