Spring Framework [#v6494139]
パッケージ概要 [#n38a2ed0]
| パッケージ |
概要 |
| org.springframework.aop |
AOP関連 |
| org.springframework.beans |
Bean管理(BeanFactory)関連 |
| org.springframework.context |
ApplicationContext関連 |
| org.springframework.core |
例外・IO処理関連 |
| org.springframework.dao |
データアクセス例外・Daoサポート関連 |
| org.springframework.ejb |
EJBアクセス関連 |
| org.springframework.jdbc |
JDBC高レベル抽象化FW |
| org.springframework.mail |
メール送信支援 |
| org.springframework.metadata |
ソースレベルメタ属性関連 |
| org.springframework.orm |
O/Rマッピング関連 |
| org.springframework.remoting |
JAX-RPC/RMIのサポート関連 |
| org.springframework.sheduling |
タイマー処理支援 |
| org.springframework.transaction |
トランザクション管理関連 |
| org.springframework.ui |
UI管理・Freemaker/Velocity支援 |
| org.springframework.util |
各種ユーティリティ |
| org.springframework.validation |
Beans検証機能 |
| org.springframework.web |
MVC機能・サーブレット・フィルタなど |
肝 [#vfc7ec6b]
DI [#v0702195]
- Factory
- BeanFacotry:Bean生成
- ApplicationContext:Bean生成・メッセージ国際化・イベント通知機構・複数コンテキスト(複数Bean定義)の利用
- BeanFactory/ApplicatonContextをSingletonで生成する。→ DIコンテナ混在時の不整合を避ける。
- SingletonBeanFactoryLocator/ContextSingletonBeanFactoryLocatorを使用する
- Bean(POJO)
- 生成時・破棄時に、それぞれInitializingBean・DisposableBeanインターフェースを使用しコールバック可能だが、Springに依存させたくない場合はBean定義のinit-method/destroy-methodを使用する
JDBC抽象化 [#n08f68a3]
- core:JdbcTemplate・各種コールバックインターフェース
- datasource:DataSource関連・Utils
- object:Query/Update処理のオブジェクト化。DBから切断して操作可
- support:JDBCの例外の抽象化+各DBへのエラーコード翻訳
トランザクション [#ad991943]
- プログラマブル
- 宣言的
- 例
- JDBCを使用したプログラムブルトラン
- JTAを使用したプログラムブルトラン
AOP [#vbfd7007]
| 用語 |
概要 |
| Aspect |
横断的関心事:Crosscutting Concernをモジュール化したもの。SpringではAdvisor/Interceptorとして実装。 |
| Joinpoint |
メソッド起動・例外スローなどのプログラム上のあるポイント。 |
| Advice |
AOPフレームワークにより特定のジョインポイントで実行されるアクション。 |
| Pointcut |
あるアドバイスがいつ起動するかを指定するジョインポイントの集合。 |
| Introduction |
メソッド・フィールドをアドバイスされるクラスに追加すること。 |
| Target Object |
Advice・プロキシされるジョインポイントを持つオブジェクト |
| AOPプロキシ |
AOPフレームワークにより生成されたAdviceを持つオブジェクト。 |
| Weaving |
ターゲットをAspectを組み合わせること。Springでは実行時にWeavingされる。 |
public interface Pointcut {
//クラスにマッチング
ClassFilter getClassFilter();
//メソッドにマッチング
MethodMatcher getMethodMatcher();
}
- 静的ポイントカット:メソッドの引数に関しては考慮しない
- RegexpMethodPointCutクラス
- RegexpMethodPointCutAdvisorクラス(含アドバイス)
- 属性駆動ポイントカット:ソースレベルメタデータを使う静的ポイントカット→Manual#8
- 動的ポイントカット:メソッドの引数も考慮する
- アドバイス
| 種類 |
インターフェース |
| Around Advice |
MethodInterceptor |
| Before Advice |
MethodBeforeAdvice |
| Throws Advice |
ThrowsAdvice |
| After Return Advice |
AfterReturningAdvice |
| Introduction Advice |
IntroductionInterceptor |
- アドバイザ
- ポイントカットをアドバイスを含んだ、アスペクトをモジュール化したもの
- DefaultPointcutAdvisorクラスなど。
- Springでは、同じAOPプロキシでアドバイスとアドバイザを両方使用することも可能。
- Weaving方法:Springでは、DIコンテナとAOPを組み合わせることでWeavingを実現。
- ProxyFactoryBeanを使用した明示的なAOPプロキシの取得。明示的に1つ1つのAOPプロキシを明記する
- インターフェースをプロキシ:JDKのDynamicプロキシを使用。
- クラスをプロキシ:CGLIBを使用。動的なサブクラス生成をするためfinalメソッドのプロキシは不可。
- 例:PoJoBeanをターゲットにしてトランザクション機能を付加する
- AutoProxy
- BeanNameAutoProxyCreator:リテラルやワイルドカードにマッチした名前のBeanに対しAOPプロキシを自動生成。
- DefaultAdvisorAutoProxyCreator:Advisorを定義することで、ポイントカットにマッチするBeanに対し、AOPプロキシを自動生成。
- メタデータ駆動自動Proxy:ソースレベルメタデータで指定する。要Commons Attributesでのコンパイル?
使ってみた印象 [#v78340fd]
- まんず、AOPのAutoProxyがうまく動かない。
- チェック例外に対しての嫌悪感はかなりのもの
- JDBCの例外の抽象化はヨイ
- Bean定義ファイルはS2と比べて冗長になりがち。
Link [#nc9f24c7]