やる気がストロングZERO

やる気のストロングスタイル

Spring徹底入門を読んでメモ: DIコンテナ編

Spring徹底入門を購入して少しだけ体系的な知識が得られたのでメモ。DIコンテナ編

「Springの体系的な知識を得たいのであればこれを読むべき」らしかったので読んでみている。

SpringBootのDI概要

DIコンテナの実態はApplicationContextクラス。

普段はSpringBoot側がやってくれるので意識しないが、以下のように書けばDIコンテナからインスタンスを取り出す部分を書くことができる。

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService service = context.getBean(UserService.class);

AppConfig.classとはbean登録の設定を書いたconfigFile。 ここに書かれているbeanがDIに登録される。 以下のような内容。

public class AppConfig {
    @Bean
    UserService userService() {
        return new UserServiceImpl();
    }
}

上記ではAppConfigクラスを使ってBean(DI)登録を行っているが、登録方法は他にもある。

java Configuration
上記のパターン

XMLベースConfiguration
xmlで書かれたconfigファイル。

new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml"); // 指定パスのxmlを読み込む
new FileSystemXmlApplicationContext("./spring/applicationContext.xml"); // 指定パスのxmlを読み込む

アノテーションベースConfiguration @Componentとかのアノテーションで書かれたやつ。SpringBootでよく使うやつ。 コンポーネントスキャンでDIコンテナに登録される。

new AnnotationConfigApplicationContext("com.example.app") // 指定パッケージ以下をコンポーネントスキャンする

コンポーネントスキャン
@ComponentScanアノテーションを利用する。

@ComponentScan(basePackage = "com.example") // com.example以下をコンポーネントスキャンする