SpringMVCを用いたWebアプリケーションでは、DIの設定をサーブレット
コンテキストとアプリケーションコンテキストに分けるとデータソース/
ビジネスロジックに関するDIの設定と、MVCに関するDIの設定を別ファイル
に記述できて便利です。
MVCに関するDIの設定とは、
HandlerMapping、Controller、ViewResolverの設定(実装クラスの指定)のことを
言っています。
具体的にはbookmng-2-servlet.xmlに全てのDIを記述していたのをapplication
Context.xmlファイル(新規作成)にデータソース/ビジネスロジックのDI設定を
移動します。
ここでどちらが先に読み込まれるかが重要になってきます。というのも
データソース/ビジネスロジックの方が先に読み込まれてDIが完了してから
IndexControllerクラスにサービスbean(catalogImplクラス)が読み込まれる
必要があるからです。
public class IndexController implements Controller{
private BookCatalog bookCatalog; //これにBookCatalogImplインスタンスが
//設定されていなければならない!
public void setBookCatalog(BookCatalog bookCatalog) {
this.bookCatalog = bookCatalog;
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String isbn = request.getParameter('isbn') ;
// 書籍一覧情報を取得(ここには入力されたisbn番号を設定)
List itemList = this.bookCatalog.getBookList(isbn);
上記コードは書籍の検索一覧表示を行うコントローラ(IndexControllerクラスの抜粋)です。
getBookList(isbn)メソッドで一覧を取得するには当然、HttpServletクラスを継承した
ControllerクラスにBookCatalogImplインスタンスがDIされていないといけません。
そこでContextLoaderListenerクラスを使います。
こうすることでapplicationContext.xmlが有効になります。
web.xml (DispatcherServletの設定) listener属性を追加 ContextLoaderListenerクラスを使う
-----------------------------------------------------------------------
'-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
'http://java.sun.com/dtd/web-app_2_3.dtd'>
org.springframework.web.context.
ContextLoaderListener
bookmng-2
org.springframework.web.servlet.DispatcherServlet
1
bookmng-2
*.html
-----------------------------------------------------------------------