#1時間でSpringFrameworkのDIを5分で分かるように説明してみた#
といっても、コードとかはほかのサイトに仰山あるみたいだし。
私は備忘録的に文章だけで説明いたします。
結論:DIとは何か
Dependency Injectionの略で、依存性注入っていう意味。
メリットあるんか
インスタンスの作成や初期化処理などを設定ファイルに切り出せるので、コードの見通しが良くなる。
DIコンテナにインスタンスのスコープやライフサイクルを管理してもらえる。
デメリットあるんか
設定ファイルが膨大な行数になったりする
サルにも分かりやすく説明して(独自見解)
まず、SpringFramework社長のDI会社というものがありました。
DI会社は派遣を提供する会社で、様々な部署があります。
しかもその部署には分身ができる優秀な忍者であればだれでも入社できることができます。
あっ、さっそく太郎君が「俺はお前に登録されるために生きてきたんだから、登録せい」とマークを付けてやってきました。
SpringFramework社長が太郎君含め入社希望の方を探して、DI会社に招き入れます。
太郎君、よかったですね。
しばらくして、メイさんがやってきました。
メイさんはこの仕事ができる人が欲しいとSpringFramework社長に要求します。
SpringFramework社長はメイさんのもとへ派遣社員を提供します。
なんと、その人はあの太郎君です。
っていうのらしい。
まぁ、要するに
SpringFrameworkがとせかせかとコンテナにBean(インスタンス)を集めて、
クラスがこのインスタンスをくれと言ったときにBean(インスタンス)を投げつけること。
サルにも分かりやすく説明して(独自見解)の詳細
- DI会社というのはDIコンテナのこと。BeanはこのDIコンテナに入れたり取り出したりする。
- DIコンテナは使用クラスにコンテナに登録されているインスタンスを提供する
- 様々な部署、じゃなくてBeanには様々な種類がある
- Bean
- Component
- Serviceなど
- クラスそのものを注入することはできない。あくまで、インスタンスを注入する。
- マークとはアノテーションのこと。ここではわかりやすくアノテーションベースで説明したが、外部設定ファイルにBeanを設定する場合はアノテーションは不要。
- Springは起動時にBean定義の目印がついたものを探し、見つけたらDIコンテナに登録する。また、@ComponentScanがあるクラスは実行時にComponentやServiceの目印がついたものを探し、見つけたらDIコンテナに登録する。
- SpringFrameworkに要求する方法はAutowiredしたり、getBeanしたりなどがある
- SpringFrameworkはその要求にこたえ、DIコンテナからそのクラスに注入する。
こんな感じかな。