こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。
会の概要
サーブレットやその他のフレームワークを使ったことはあるし、Javaの知識もあるけれどSpringやSpring Bootを初めて学ぶ人を対象に、SpringやSpring Bootをの基本を説明してくれるイベントです。
会の様子
以下、常体で話されていた内容を書いていきます。
Springとは
- VMwareが開発しているオープンソースなJava FW
- Rod Johnsonが自著のためにサンプルコードを書いたのが始まり
- 2022年にJDK17以上が必須となるSpring6.0がリリースされる。
DIコンテナとは
インスタンスの入れ物。このコンテナで管理されているインスタンスをBeanと呼ぶ。
Beanを定義する方法は以下の4つ。*1
- コンポーネントスキャン(@Componentが付いているクラスをBean管理する。@ConfigurationがついているJava Configで指定したパッケージ内の@Componentを探す)
- Java Config(Java Config内のメソッドに@Beanをつけると、そのメソッドの戻り値が@Beanになる)
- 関数型Bean定義
- XML
Java configを指定してApplicationContextを作成すると、DIコンテナが作成できる。ApplicationContext#getBean()でBeanを取得できる。
コンストラクタに@AutoWiredをつけておくと、DIコンテナがそのコンストラクタを使用して、適切なBeanを引数に代入してくれる。*2
なお、@AutoWiredはコンストラクタ以外にもつけることが可能だが、クラスをイミュータブルにするためにはコンストラクタにつける以外の方法はないため、コンストラクタにつけることを推奨(=コンストラクタインジェクション)
AOP
Beanに対して割り込み処理を定義するための仕組み。今回のイベントではあまり詳しく説明しない。
Springのサブプロジェクト
Spring JDBC
JDBCによるDBアクセスコードをシンプルに書くことができるサブパッケージ。
Spring Tx
トランザクションの開始・コミット・ロールバックを自動で行うパッケージ。
@Transactionalを付加したメソッドにAOPで割り込み処理をする。
Spring MVC
サーブレットベースで作られたWebアプリケーションフレームワーク。(ただし使い手はサーブレットベースで作られていることを意識することはほぼない)
MVCモデルの雛形として機能し、Controllerの作成やViewとの連携*3ができる。
その他
- Spring Security
- Spring Data
- Spring Batch
- Spring Cloud
などなど(サブパッケージは膨大にあるので詳細説明は割愛)
Spring Bootとは?
Springで開発をしていくと、ライブラリがあまりにも多すぎる上に記述が必要なJava Configも大量にあり、開発を始めるまでが大変であるという課題がある。
この課題を解決するために、Spring Bootが登場した。
具体的には、ライブラリをまとめたライブラリ(Starterライブラリ)と、Java configの定義を少なくするためのAuto ConfigurationがSpring Bootで用意されている。
様々な便利機能*4が用意されているが、開発を始めるまでの準備を楽にして開発の一歩目を早く踏み出せるようにすることにフォーカスしており、開発を始めた後Spring Bootを使っていて楽に開発できるということはない。
参考資料
springfest2020.springframework.jp
会全体を通した感想
業務で今更ながら(?)初めてSpring Bootを使うことになったので参加したのですが、エントリーポイントとしてありがたいでした。