[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 メーリングリストの案内