spring framework 簡易勉強メモ(一):ApplicationContext、Bean、Autowired
本質
- new classの回避
- IoC、DI、依存性の注入
考え方
- 容器の定義(ApplicationContext)
- 入れ物の定義(Bean)
定義方法
- A、JAVAベース
- B、XMLベース
- C、アノテーションベース★
JAVAベース
- @Configuration(容器側)
- @Bean(容器側)
XMLベース
- XMLファイルより
アノテーションベース
- @Configuration(容器側)
- @ComponentScan(容器側)
- @Component(入れ物側)
Beanの参照
- A、setXXX()
- B、コンストラクタ()
- C、@Autowired★
@Autowired
-
@Autowired(required = false)
- injection時値が必須かどうか設定、未設定時エラーを回避
-
@Qualifier("XXX")
- injection時型ベース⇒名前ベース、同じ型複数Beanを注入可能
-
@Bean(name = "XXX")
- 指定可能
-
@XXX
- アノテーションの自分定義が可能
-
@Resource
- フィールドまたプロパティ
- ListやMapで一括Autowiredは可能
@ComponentScan
- @ComponentScan(basePackages = "XXX.XX.XX")
- 対象:
- @Controller リクエストやレスポンス
- @Service ビジネス
- @Repository データ永続化
- @Component 上記以外
- フィルター指定可能
Beanのスコープ
- singleton(default)
- DIコンテナに同一のインスタンス
- porototype
- Beanを取得時インスタンスを生成
- session session単位
- request request単位
- など略
異なるスコープ問題の理解
- 生成インスタンスの本質から考慮
- scoped proxyの使用
容器の破棄
- 明示的にクロース context.close()
- try-with-resources
Configの分割
- @import({AxxConfig.class,BxxConfig.class})