目的
業務効率化
DI(Dependency injection)コンテナとは
ひとことでいうと、「プログラムではなく外部よりインスタンスを注入すること」 = 「依存性の注入」として訳されます。
new演算子を使ってプログラム内でインスタンスを作るのではなく、外部機能でインスタンスを作成して使用することができる
SpringBootではDI(依存性注入)を用いた設計が採用されており、コードの依存性を少なくすることができます。
クラスのインスタンスであるBeanは、DIコンテナに保存されます。
SpringBootのクラス間の呼び出し等は、DIコンテナに登録されたBeanを取得することで実行されます。
標準的なBeanの登録方法は、以下方法があります。
-
@Bean
をメソッドに付与する。メソッドの返り値に指定したクラスのシングルトンが、DIコンテナに登録される - Bean登録したいクラスに、
@Component
をクラスに付与する。そのクラスのシングルトンがDIコンテナに登録される - API宣言である
@RestController
や 環境クラス宣言である@Configurationt
等、付与するだけでそのクラスのBean登録がされる。
SpringBootの起動時に、@ComponentScanで指定したパッケージ以下をDIコンテナの読み込み対象にします。
@SpringBootApplication
/* demo.serviceとdemo.domain以下のうち、@componentやDI登録用アノテーションが
付与されているクラス/メソッドをDIコンテナにBean登録する。 */
@ComponentScan(
scopedProxy = ScopedProxyMode.TARGET_CLASS,
basePackages = {"demo.service","demo.domain"}
)
public class SBDataBaseDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SBDataBaseDemoApplication.class, args);
}
}
DI対象となる主なアノテーション
@Controller
コントローラー層のクラスに使用する。
@RestController
WebAPIのコントローラー層のクラスに使用する。@Controller
と@ResponseBody
を組み合わせたものです。
@Service
サービス層のクラスに使用する。主にビジネスロジックを実行するクラスに使用する。
@Repository
データ層のクラスに使用する。主にDBアクセスするクラスに使用する。
@Component
上記の他にDI対象とするクラスに使用する。
参考
Spring 主要ポイント
https://atuweb.net/201509_spring_framework_good_points/
Spring Bootで作るRESTful Web Service
https://www.slideshare.net/WataruOhno/spring-fest-2018-spring-bootrestful-web-service
https://terasolunaorg.github.io/guideline/5.0.1.RELEASE/ja/ArchitectureInDetail/REST.html