Spring Frameworkとは
アプリケーション開発を容易にすることを目的としたオープンソースのJavaアプリケーションフレームワークのこと。
多数のサブプロジェクトで、Webアプリケーション開発に必要な機能(リクエストマッピング、セッション管理、入力チェック、画面遷移処理、タグライブラリなど)を提供しており、開発の効率化が期待できる。
Spring Bootも含まれる。
Spring Frameworkの主な特徴
Spring Frameworkの特徴として、AOPとDIと呼ばれる概念で構築されている。
DI(依存性の注入)
「Dependency Injection」の略。プログラムコードから依存関係を取り除き、外部から依存性を与えることで、コンポーネントの独立性が高まる。
DIを用いれば、オブジェクトの成立要件に必要な情報を、外部に切り離して設定する「コンポーネント」を作成できるようになる。
DIについて詳しく書いた記事を書いたので、詳しくはこちらを御覧ください。
AOP(アスペクト指向プログラミング)
「Aspect Orientation Programming」の略。オブジェクトの本質ではない複数のオブジェクトにまたがる共通の処理を分離することで、オブジェクト指向では解決が困難な問題点を解決する。
システム内で行われる同じ処理(共通処理)を抽出して集約をする。プログラミングの「本質的な処理」のみをクラスに書き、そうではない処理を別に書くといったように、処理の分断を行うことができる。
AOPについて詳しく書いた記事を書いたので、詳しくはこちらを御覧ください。
Springを使用するメリット
拡張性が高い
ここで言う拡張性とは、機械やアプリケーションが本来備えている機能をさらに向上させる性能を指す。Spring Frameworkは、基本的な機能の大部分が「インターフェース」として提供されているので、性能の向上が行いやすい。
保守性に優れている
「AOP(Aspect Oriented Programming)」によって、例えばログの出力のような機能を、本来のプログラムとは分割して行う事ができるので、バグや不具合があった際にどこが問題になっているのかを特定しやすく、解決が容易となる。
テストがしやすい
Spring Frameworkは「Spring MVC Test」という優秀なテストプログラム機能が使用可能。
「Spring MVC Test」は、一つ一つの処理ごとに行う単体テストではなく、コンテナコンテキストの配線やデータアクセスなど、一連の処理をテストする結合テストを行う事が可能。
変更がしやすい
「DI」(Dependency Injection)を使用することで、オブジェクトを利用する状況が変わっても、設定を変更するだけでそのオブジェクトを利用できるようになるため、修正範囲を最小に留められる。
再利用性が高い
Spring FrameworkはDIとAOPの仕組みにより、共通プログラムの再利用が容易となる。プログラムを再利用することで、プログラムを書く量が減り、修正する場合も最低限の修正で済むようになる。
デメリット
・豊富なプロジェクトを有し、幅広い開発に対応しているが、その規模の大きさゆえに全体を把握しにくい
・日本語の情報が少なく、学習コストが高い
・設定一つで機能を実現できるがその設定が難しい
Spring Boot
Spring Bootとは
SpringFrameworkを使用したJavaで行うWebアプリ開発を迅速かつ効率的にする仕組みを備えたフレームワークのこと。Spring Frameworkの機能の使い分けが難しいというデメリットを解決するために作られたフレームワーク。
特徴
- 複数のフレームワークを使用するときに発生するBean定義やXML設定を可能な限り自動設定する機能を持ち、必要最低限の設定を行うだけでアプリケーションの起動・実行を行うことができる。
- アノテーションを記述することにより機能を実装することが可能なため、コーディング量が削減される
- Webコンテナをjar(Java ARchive)ファイルに含めることが可能で、jarファイル単体でWebアプリケーションの作成が可能。Spring BootではデフォルトでTomcatコンテナを含んでいる。
Spring Bootプロジェクトの作成
以下のサイトで作成可能。
Eclipse上でも、「新規」⇒「Springスタータープロジェクト」から作成可能
application.ymlはなにか?
Spring Bootの色々な設定を行うファイル。
application.ymlで設定できるプロパティの一覧
https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/appendix-application-properties.html
application-プロファイル名.ymlとすることで、環境ごとに設定ファイルを作成することができる。
環境変数とapplication.yml
application.ymlには環境変数をインジェクションすることができる。
環境変数をインジェクションする理由
- 環境ごとに設定ファイルを作成する必要が無くなる。
環境変数を前もって設定しておくか、実行時に設定するようにすれば、同じ設定ファイルを他の環境でも利用することが出来る。
開発時はローカルDBを使用することが多いので、人によってURLが異なるが、設定ファイルの書き方は統一できる。 - セキュリティの向上につながる。
application.properties内にユーザー名やパスワードといった秘密にしたい情報をベタ書きした状態で、リモートリポジトリに上げてしまったりするとセキュリティの問題にもなりかねない。
以下は環境変数をapplication.ymlにインジェクションする例である。
spring: # JDBCの接続設定 datasource: driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver url: ${DATASOURCE_URL} username: ${DATASOURCE_USER_NAME} password: ${DATASOURCE_PASSWORD}