天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

JJUGナイトセミナー「初めてのひとのためのSpring/Spring Boot」に参加してきた

jjug.doorkeeper.jp

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

サーブレットやその他のフレームワークを使ったことはあるし、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を使っていて楽に開発できるということはない。

参考資料

www.docswell.com

speakerdeck.com

speakerdeck.com

www.slideshare.net

springfest2020.springframework.jp

qiita.com

spring.pleiades.io

会全体を通した感想

業務で今更ながら(?)初めてSpring Bootを使うことになったので参加したのですが、エントリーポイントとしてありがたいでした。

*1:上位2つが一般的にはよく使われる

*2:クラス内にコンテキストが一つの場合は@AutoWiredをつけないことが多い

*3:作成できるViewは、Thymeleaf, FreeMarker, Groovy Templates, JSP...

*4:実行可能JARによるデプロイのコスト削減、application.propertiesに外部設定を逃すことが可能、Actuatorによる監視が可能でメトリクスがWeb APIとして提供されている