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


-----------------------------------------------------------------------