Spring Frameworkを一から勉強する記録

# 概要
Spring Frameworkについての勉強記録。
基本は[初心者のためのSpring Framework入門](https://www.tuyano.com/index2?id=4466003)を見ながら環境構築〜簡単なプロジェクトの作成を行っていく。
本記事では上記サイトを読んでいてわからないところや躓いたところを中心に書いていく。

# 環境
2019年5月15日現在の最新バージョンだと思う。

- macOS Mojave バージョン10.14.4
- Spring Framework 4.1.7.RELEASE（**※最新ではない**）
- Spring Tool Suite 4 バージョン4.2.1
- Apache Maven 3.6.1
- Java SE Development Kit 8u211

# 1. Springプロジェクトの作成
さっそく「Mavenによるプロジェクト作成」と書いてあるがMavenすらインストールしていないのでまずはApache Mavenをインストールする。

## Apache Mavenのインストール

### Apache Mavenのダウンロード
[Apache Maven](https://maven.apache.org/download.cgi)から最新版のApache Mavenをダウンロードする。
Macなのでtar.gz形式のバイナリをダウンロード。
![スクリーンショット 2019-05-16 9.58.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417570/579023c5-470a-ef1f-b846-af3864db1aa6.png)
ダウンロードした圧縮ファイルを適当なディレクトリに展開する。

### システムパスの設定
`.bash_profile`に`export PATH=$PATH:(DirectoryName)/maven/bin`を追記。

### バージョン確認
以下のコマンドを実行する。バージョンが表示されれば正常にインストール完了。

```
$ mvn -version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T04:00:29+09:00)
Maven home: (DirectoryName)/maven
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.4", arch: "x86_64", family: "mac"
```

## Spring Frameworkのインストール
Apache MavenがインストールできたらmvnコマンドでSpring Frameworkをインストールする。

pom.xmlにSpringのコアライブラリを追記するところで、
> なお、今回は必要最小限に内容を絞っているため、JUnitのライブラリをはずしてあります。その関係で、「src」フォルダ内にあるフォルダは削除しておいてください。（JUnitがないので、ユニットテストのソースコードファイルがビルドできなくなるため、残しておくとビルドエラーになります）

と書いてあるが削除してしまうと後の動作確認ができなくなるので削除しない。pom.xmlの記述も残しておく。

Springのコアライブラリがインストールでき動作確認をするところで
>これで、必要なライブラリなどをダウンロードし、プロジェクトをビルドしてJarファイルを作成します。「target」フォルダというものが作成されるので、この中を見てみましょう。すると、「**MySpringApp-0.0.1-SNAPSHOT.jar**」というファイルが作成されているはずです。これがビルドされたJarファイルです。
>
>では、これを実行してみましょう。コマンドラインから「cd target」を実行して「target」フォルダ内に移動し、以下のように実行をします。
>
>`java -classpath .;MySpringApp-0.0.1-SNAPSHOT.jar com.tuyano.libro.App`
>
>クラスパスに**MySpringApp-0.0.1-SNAPSHOT.jar**を指定して、com.tuyano.libro.Appを実行します。これで、Appクラスのmainメソッドが実行され、「Hello World!」とテキストが表示されます。

と書いてあるがjarファイル名が間違っている。正しいjarファイル名は`MySpringApp-1.0-SNAPSHOT.jar`。
このjarファイル名はSpring Frameworkのインストール時に指定できる。
コマンドのjarファイル名の前の`.;`も私の環境では不要だった（つけるとコマンドエラーになる）。
またpom.xmlにSpringのコアライブラリを追記するところでJUnitの記述とsrcフォルダを削除してしまうとこの動作確認が行えない。

## STS4にプロジェクトをインポート
mvnコマンドで作成したプロジェクトをSTS4にインポートする。
STS4を起動するとJDKがない旨のエラーメッセージが表示されるのでJDKをインストールする。

### JDKのインストール
[Java SE Development Kit](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)から最新版のJDKをダウンロード（要Oracleアカウント）。
![スクリーンショット 2019-05-16 10.34.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417570/aaf779c4-073d-5849-9015-d39e9ca1c553.png)
ダウンロードしたdmgをマウントしパッケージを実行する。ウィザードに従って進めていきインストール完了。

STS4を起動しメニューから`[File] - [Import]`を選択する。
![スクリーンショット 2019-05-16 10.42.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417570/13f08b90-ce56-8ca7-d431-5daebcd60f3e.png)
`Maven - Existing Maven Projects`を選択し次へ。
![スクリーンショット 2019-05-16 10.46.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417570/f9c65bc6-5fbd-760d-877d-036235b8ddfb.png)
作成したMySpringAppを開くと`Projects`にpom.xmlが表示されるので選択されていることを確認し完了。

# 2. Dependency Injection（DI）とBean
順番に作成・実行していく。特にわからないところや躓くようなところはなかった。

# 3. アノテーションによるDIの実装
コンポーネントの作成のところで、
>これでコンポーネントは完成ですが、実はもう１つだけやっておくことがあります。Bean設定クラス（SampleBeanConfig）の宣言の手前に、以下のアノテーションを追加して下さい。
>
>```
>@ComponentScan
>```
>
>既に@Configurationアノテーションが付けられていますから、その上か下に追加すればいいでしょう。

と書いてあるがただ`@ComponentScan`を追記しただけではエラーになる。
`@ComponentScan`に加えて`import org.springframework.context.annotation.ComponentScan;`を追加する。

# 4.AOPの利用
アノテーションでAOP設定クラスを作成するところで、App.javaにインポートが足りないので`import org.springframework.context.annotation.AnnotationConfigApplicationContext;`を追加する。

# 5. AspectJを利用する
Bean設定クラスを利用するところで、App.javaにインポートが足りないので`import org.springframework.context.annotation.AnnotationConfigApplicationContext;`を追加する。

# 6. Spring Data JPAの利用
Bean設定クラスを利用するところで、App.javaにインポートが足りないので`import org.springframework.context.annotation.AnnotationConfigApplicationContext;`を追加する。

# 7. CRUDの基本をマスターする
順番に作成・実行していく。特にわからないところや躓くようなところはなかった。

# 8. JpaRepositoryを利用する
順番に作成・実行していく。特にわからないところや躓くようなところはなかった。