Springとの連携
ClickのExtrasにはSpringと連携するためのSpringClickServletが含まれており、これを利用することでページクラス等をSpringの管理下に置くことができるようになります。
ページの生成
SpringClickServletはデフォルトのClickServletを継承しており、newPageInstance()メソッドを以下のようにオーバーライドしています。
SpringClickServletはClickとSpringを統合するために以下の2通りの方法をサポートしています。
ページクラスをSpringでインスタンス化する
ページクラスをSpringでインスタンス化する場合、Springの設定ファイルで以下のように定義します。bean要素のid属性はページのクラス名と同じものを指定します。
Clickのページクラスはスレッドセーフではないので、ページクラスを定義したbean要素のsingleton属性は必ずfalseに設定してください。
ページクラスをClickでインスタンス化する
Clickでインスタンス化されたページがSpringのApplicationContextAwareインターフェースを実装していた場合、SpringClickServletは生成したページにApplicationContextをインジェクションします。
この方法の利点はページクラスをSpringの設定ファイルに記述しなくてもよいという点です。しかし、ApplicationContextからBeanを取得するためのコードをハードコーディングしなければならないというデメリットも存在します。
アプリケーションコンテキストの設定
SpringのBeanは通常、applicationContext.xmlというファイルで定義されます。applicationContext.xmlには以下の2通りの配置方法があります。
WEB-INFディレクトリに配置する
1つめは設定ファイルを/WEB-INF/applicationContext.xmlに配置し、web.xmlでSpringのContextLoaderListenerを使用して設定ファイルを読み込む方法です。
この方法は、アプリケーションの実行中にapplicationContext.xmlに変更が加えられた場合にSpringによって自動的に変更が反映されるというメリットがあります。
クラスパスに配置する
2つめは、applicationContext.xmlをクラスパス上に配置する方法です。たとえば/WEB-INF/classes/applicationContext.xmlに設定ファイルを配置したとします。この場合、web.xmlでSpringClickServletの初期化パラメータで設定ファイルのパスを指定します。