Spring
SpringはDIを実現し,AOP,他のO/Rマッピングツールや各種フレームワークとの連係が可能なフレームワークである.守備範囲は広いが機能を選択的に導入することが可能で軽量である.とにかく流行っているようなので,調査してみた.
BeansとかBeanFactoryとかContextといった,Springの最も基本的なものに関して調査してみた.
Springフレームワークは機能的に盛りだくさんのようなので,まず最初に全体を概観してみる.
BeanFactoryはSpringフレームワークの最も基本的な機能を提供するインタフェースらしいので,まずBeanFactoryを使用してみることから始めてみる.
前頁ではBeanFactoryはbeanのコンストラクタによってbeanをインスタンス化した.次にBeanFactoryがbeanのFactoryクラスのstaticなFactoryメソッドによってbeanをインスタンス化するように指定する方法を調査してみた.
前頁ではBeanFactoryはstaticなFacotryメソッド経由でbeanをインスタンス化した.次にBeanFactoryがFactoryクラスをインスタンス化し,そのインスタンス化されたFactoryオブジェクトのインスタンスFactoryメソッドからbeanをインスタンス化するように設定してみる.
BeanFacotryに対してbeanを指定するのに要素beanの属性id,nameを使用してきたが,nameには一度に複数の名前を指定可能らしい.また要素aliasを使用して文字通りbeanの別名を定義することが可能らしいので試してみた.
今までのサンプルでも記述してきたが,特に指定しない場合,BeanFactoryが作成するbeanはSingletonとなる.本頁ではSingletonと,そうでない場合の指定方法とその動作を確認する.
もちろん前頁までのサンプルも,設定ファイルに記述したbeanをプログラムにInjectしていた(プログラム本体のbeanへのDependency Injection).本頁ではさらに設定ファイル内の複数のbean間のDependency Injectionを試してみる.
前頁ではsetterを使用したDependency Injectionの設定と実装を行った.既存プログラムにSpringを導入する場合等には,コンストラクタを使用するDependency Injectionの設定と実装を行いたい場合も想定されうる.そしてSpringはそれをサポートしているようなので,試してみた.
beanへ値を設定する要素propertyには,List,Set,Map,Propertiesなどを設定することができる.さらに要素property内で要素beanを配置し,そこで(入れ子の)beanの定義を定義を行うこともできる.こうした要素propertyのいろいろな設定を試してみた.
Springではbeanのメンバとしてbeanを設定することができる.しかし,含有する側のbeanをSingleton,含有される側のbeanを非Singletonとしたい場合,含有される側をnewするキックをどうするかという問題が発生する.Springではlookup method injectionという仕組みによって,これを容易に実現する方法を提供しているようなので,試してみた.
Springではあるbeanのあるメソッドをそのbeanの修正はおろか拡張することさえなく差し替えることができるようなので,試してみた.
要素beanは属性depends-onを指定することで,bean間の依存関係を明示できる.これを使用すると,単純に要素refを使用した場合と,bean生成順序が異なってきて,便利な場合があるかもしれない.
要素beanの属性autowriteを指定することによって,設定することなく自動的に依存beanをsetしれくれるようなので,試してみた.
要素beanの属性dependency-checkは,該当beanで設定可能なプロパティが全て設定されているかどうかをチェックしてくれるようなので,試してみた.
beanが生成された時や,beanが破棄された時に実行するフックメソッドを簡単に実装できるようなので,試してみた.
あるインタフェースを実装したbeanには,BeanFactoryによって追加的な情報が設定されるらしいので,試してみた.
bean設定ファイルにて,属性abstractや属性parentを使用することによって,Javaクラスのような継承パターンを実現できる.これを使用すると設定ファイルがすっきりする場合がある.
今まで,BeanFactoryと言えば,作成してgetBeanメソッド呼び出しをするだけだったが,他のBeanFactoryのメソッドにも触れてみる.
BeanPostProcessorの実装クラスを作成し,ConfigurableBeanFactoryに登録すると,ConfigurableBeanFactoryがbeanを生成した前後に処理を実行させることができるらしいので,試してみた.
BeanFactoryPostProcessorは,BeanFactoryをインスタンス化した後に,そのインスタンスを引数にとり,何らかの処理をするものである.アプリケーションの起動後の初期化パターンとして使えることがあると思う.BeanFactoryPostProcessorの一つ,PropertyPlaceholderConfigurerは,設定ファイルであるbeans.xmlでの設定値を更に外部プロパティファイルへと移動することが可能な機能を持つらしいので,BeanFacotryPostProcesssorの挙動確認を兼ねて試してみた.
PropertyOverwrideConfigurerはBeanFactoryPostProcessorの一つである.プロパティファイルの記述により,beans.xmlの設定を上書きすることができる.
BeanFactoryの拡張であるApplicationContextは,メッセージをプロパティファイルから読み込んで,上位から指定されたキーで取り出す仕組みを提供している.
ApplicationContextでは,イベントを伝播する仕組みがあるらしいので,試してみた.
ApplicationContextを使用すると,リソースの特定をある程度自動化し,リソース種別(ファイルかネットワーク越しデータかなど)を上位から隠蔽できるようなので,試してみた.
java.beans.PropertyEditorは,String型の値を,実際の何らかの型に変換する際に使用できる.Springでは,これを容易に使用するための仕組みがあるようなので,試してみた.
PropertyPathFactoryBeanというFactoryBeanを使用すると,プロパティをより簡単に指定,取得できるらしいので,試してみた.
FieldRetrievingFactoryBeanを使用すると,フィールドをより簡単に指定,取得できるらしいので試してみた.
MethodInvokingFactoryBeanを使用すると,beanの生成やその前処理の設定が,容易に行えるらしい.
Bean設定ファイル(ファイヤープロジェクトではbeans.xmlとしてきた)がでかくなった場合は,分割すると管理が容易になる場合がある.この分割方法は,Springでは少なくとも三つあるようなので,試してみた.
サーブレットではContextLoaderを直接,間接的に使用することによって,WebApplicationContextを初期化,取得することができるらしいので,試してみた.
Springでのメール送信のためのサポートを調査してみた.
Springのメール送信のための構成を確認し,実際にメール送信してみる.
SpringはMIMEもサポートしているらしいので,試してみた.
SpringはHibernateとの連係をサポートしているらしいので,調査してみた.
Springをベースに,O/RマッピングとしてHibernateを使用する際の,基本的な設定とHibernateTemplateを使用したHibernateとの連係方法を調査してみた.
Springにて,HibernateのDataSourceをJNDIで取得する方法を調査してみた.
SpringのHibernate連係では,直接Hibernateを操作するサポートクラスとして,HibernateDaoSupportがあるようなので,試してみた.

