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以下をコンポーネントスキャンする