Spring MVCでJUnitテスト
Spring MVCのテストについて書く。
spring-testを使用するとコントローラのJUnitテストも可能になる。
テストやコードインスペクションレポートのMaven設定は以下を参照。
テスト対象アプリ
以下の記事で紹介した入門アプリをテスト対象とする。
テストの作成
以下を作成する。
- com.pepese.sample.service.HelloServiceTest
- コントローラへDIされるサービスクラスのテスト
- com.pepese.sample.controller.HelloControllerTest
- コントローラのテスト
サービスのテスト(com.pepese.sample.service.HelloServiceTest)
ポイントは以下。
@RunWith(SpringJUnit4ClassRunner.class)
アノテーション- SpringでJUnitテストするときはコレをつける
@ContextConfiguration
アノテーション- SpringのJava/XML Based Configurationを指定する
@ContextConfiguration(classes = {AppConfig.class, WebMvcConfig.class})
@ContextConfiguration(locations = { "file:src/main/resources/META-INF/spring/spring-mvc.xml" })
@WebAppConfiguration
アノテーション- Webアプリケーションのテストの際に付与する
Springの設定(Java/XML Based Configuration)を読み込んでいるのでDIでテスト対象のインスタンスを取得できる。
コントローラのテスト(com.pepese.sample.controller.HelloControllerTest)
ポイントは以下。
- テスト対象となるコントローラクラスを指定して、コントローラのモック(
MockMvc
)を作成できる - モック(Mockito)を使用するためにルール(
@Rule
)を宣言する @Mock
でモックオブジェクトがDIされるwhen
メソッド等(Mockito)を使用してコントローラ内にDIされたモジュールの挙動を指定できる- HamcrestのMatchersを使用してassertする
テストの実行
基本的には mvn test
で実行可能だが、特定のクラスを指定してテストしたい場合は mvn clean test -Dtest=*.HelloControllerTest
のように指定して実行できる(正規表現の指定可能)。
また、 mvn clean test -Dtest=*.HelloControllerTest,*HelloServiceTest
のようにカンマ区切りで複数指定することもできる。
参考
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
Ruby on Rails入門
サンプルアプリを作りながらRuby on Railsの全体像を把握する。
実行環境構築は以下を参照。
また、ここでの実行環境は以下。
> ruby -v ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32] > rails -v Rails 5.0.0.1
Ruby on Railsアプリケーションの作成
Ruby on Railsではrailsコマンドを使って設定ファイルやソースを半自動生成しながら開発する。
アプリケーションの作成には「rails new」コマンドを使用する。
rails newコマンド
rails new [アプリ名] [options]
rails newコマンドのオプション(rails new --helpで詳細出る)
オプション | 説明 | デフォルト |
---|---|---|
-r, -ruby=PATH | ruby実行ファイルまでのパス | |
-m, -template=TAMPLATE | アプリケーションテンプレートのパス | |
-d, --database=DATABASE | データベースの種類 | sqlite3 |
-j, --javascript=JAVASCRIPT | 組み込むJavaScriptライブラリーを指定。 | jquery |
--skip-gemfile | Grmfileを作成しない | 作成する |
ーB, --skip-bundle | bundle installを行わない | installする |
-G, --skip-git | .gitignoreを作成しない | 作成する |
--skip-keeps | .keepを作成しない | 作成する |
-M, --skip-action-mailer | Active Mailerを作成しない | 作成する |
-O, --skip-active-recode | Active Recordを作成しない | 作成する |
-P, --skip-puma | Pumaを関連付けない | する |
-C, --skip-action-cable | Action Cableを作成しない | 作成する |
-S, --skip-sprockets | Sprocketsを作成しない | 作成する |
--skip-spring | springアプリケーションをインストールしない | |
--skip-listen | listen gemに依存した設定を作成しない | |
-J, --skip-javascript | javascriptを組み込まない | |
--skip-turbolinks | turbolinks gemをスキップする | |
-T, --skip-test-unit | test::unitを組み込まない | |
--dev | github リポジトリ上の自分のコードから作成 | |
--edge | github リポジトリ上の最新のコードから作成 | |
--rc=RC | Railsコマンドのオプションファイルを指定 | |
--no-rc | .railsrcファイルをロードしない | する |
--api | APIのみのアプリケーション設定 | |
-f, --force | ファイルが存在する場合に上書きする | |
-p, --pretend | ドライランする | しない |
-q, --quiet | 進捗情報を表示しない | する |
-s, --skip | 既に存在するファイルについてはスキップ | しない |
-h, --help | ヘルプ | |
-v, --version | バージョンを表示 |
1.「C:\workspace\rails」を作成してcdする。
2.「rails new sample」をうつ。
sampleというアプリケーションのスケルトンが作成される。
バージョンを指定したい場合は「rails _4.2.7_ new sample」のように打つ。
ディレクトリツールはこんな感じ。(一部省略)
> tree /f . C:. │ config.ru # Rack設定ファイル(Ruby製Webサーバ) │ Gemfile # Gemの定義ファイル │ Rakefile # Rakeの定義ファイル ├─app # アプリのクラス、設定ファイル │ ├─assets # アセット(image/js/css) │ ├─channels # WebSocketクラス │ ├─controllers # コントローラクラス │ ├─helpers # ビューヘルパー │ ├─jobs # Active Jobクラス │ ├─mailers # Active Mailerクラス │ ├─models # モデルクラス │ └─views # ビュー(ERBなど) ├─bin # 各種スクリプトを配置 ├─config # 各種設定ファイルを配置 │ ├─environments # 環境別設定ファイル │ ├─initializers # 初期化用設定ファイル │ └─locales # 国際化用設定ファイル ├─db # データベース定義、設定ファイル ├─lib # 自作ライブラリ置き場 ├─log # ログ出力先 ├─public # 公開ファイル置き場 ├─test # テストスクリプト ├─tmp # テンポラリ └─vendor # サードパーティJS/CSS置き場
3.「rails server」をうつ。
WEBrickというRails組み込みのHTTPサーバが起動する。
4.ブラウザで「http://localhost:3000」へアクセス。
「Yay! You’re on Rails!」って出る!
HTTPサーバを停止するときはDOSでCtr+cでとまる。
Rails開発の基本
Railsは大枠はMVC単位で開発していく。
MVC以外にも作成単位があり、いずれも「rails generate」コマンドを使用してソースコードを半自動生成して開発を進めていく。
ここでは、上記のサンプルアプリをもとにMVCを作成していく。
rails generateコマンド
rails generate GENERATOR [args] [options]
GENERATORには以下の種類がある。(rails generate --help)
Rails: assets channel controller generator helper integration_test jbuilder job mailer migration model resource scaffold scaffold_controller task Coffee: coffee:assets Js: js:assets TestUnit: test_unit:generator test_unit:plugin
GENERATORの種類によって以下のファイルが生成される。(オプションで多少変化する)
GENERATOR | コントローラ | ビュー | モデル | マイグレーション | アセット | ルーティング | テスト | ヘルパー |
---|---|---|---|---|---|---|---|---|
assets | × | × | × | × | ○ | × | × | × |
controller | ○ | ○ | × | × | ○ | ○ | ○ | ○ |
generator | × | × | × | × | × | × | × | × |
helper | × | × | × | × | × | × | ○ | ○ |
integration_test | × | × | × | × | × | × | ○ | × |
jbuilder | × | ○ | × | × | × | × | × | × |
mailer | × | × | × | × | × | × | ○ | × |
migration | × | × | × | ○ | × | × | ○ | × |
model | × | × | ○ | ○ | × | × | ○ | × |
resource | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
scaffold | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
scaffold_controller | ○ | ○ | × | × | × | × | ○ | ○ |
task | × | × | × | × | × | × | × | × |
ちなみに失敗したら「rails destroy GENERATOR」コマンドで削除できる。
コントローラ(C)の作成
■rails generate controllerコマンド
rails generate controller [NAME] [action action] [options]
- NAME
- コントローラ名
- 「[NameSpace]/コントローラ名」とスラッシュで区切ると名前空間を設定できる。
- 名前空間を設定するとディレクトリが分割されたり、名前空間名のプレフィックスがついたりする
- action
- アクション名を指定
- 作成されるコントローラクラスのメソッド(アクションメソッド)となる
■rails generate controllerコマンドのオプション
- 「--skip-namespace」/「--no-skip-namespace」
- 名前空間設定がスキップされる(デフォルト:スキップしない)
- 「-e [NAME]」「--template-engine=[NAME]」
- 使用するテンプレートを指定(デフォルト:erb)
- 「-t [NAME]」「--test-framework=[NAME]」
- 使用するテスティングフレームワークを指定(デフォルト:test_unit)
- 「--helper」
- ヘルパーを作成するか(デフォルト:true)
- 「--assets」
- アセットを作成するか(デフォルト:true)
1.「C:\rubyWorkspace\sample」へcd
2.「rails generate controller hello index」をたたく
ディレクトリツリーはこんな感じ。(新規作成された箇所のみ)
create app/controllers/hello_controller.rb route get 'hello/index' invoke erb create app/views/hello create app/views/hello/index.html.erb invoke test_unit create test/controllers/hello_controller_test.rb invoke helper create app/helpers/hello_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/hello.coffee invoke scss create app/assets/stylesheets/hello.scss
3.コントローラクラス(hello_controller.rb)を編集
class HelloController < ApplicationController def index render text: 'Hello World !' # この行を追加! end end
4.ルーティングの設定(/config/routes.rb)
アクセスURIとコントローラクラス+アクションメソッドとの紐付を「routes.rb」で行う。
今回はrails generateコマンドで自動生成されている部分の確認。
Rails.application.routes.draw do get 'hello/index' # この行が自動で追加されている end
HTTPメソッドGetで「http://localhost:3000/hello/index」へアクセスするとhelloクラスのindexメソッドが呼び出される。
また、「rake routes」コマンドで現在有効なルートをリスト表示してくれる。
5.「rails server」をたたく
とめていなければ実行する必要はない。
6.ブラウザで「http://localhost:3000/hello/index」へアクセス
「Hello World !」と表示される。
これはhelloコントローラクラスのindexアクションで「render text: 'Hello World !'」の出力がそのまま表示されているだけで、ビュー機能は使用していない。
ビュー(V)の作成
Viewはrails generateコマンドで既に作成されており、「app/views/hello/index.html.erb」にある。
rails generateコマンドを実行する際、actionを指定しておくとアクションメソッドと同じファイル名(+.html.erb)で作成される。
ERB(拡張子erb)はEmbedded Rubyの略でRubyで使用されるテンプレートエンジン。
1.コントローラクラス(hello_controller.rb)を編集
class HelloController < ApplicationController def index # render text: 'Hello World !' # コメントアウト @msg = 'Hello World !' # 追加行 end end
アットマーク(@)を付けた変数はテンプレート変数といい、ビューへ値を引き渡す役目になる。
2.ビュー(views/hello/index.html.erb)を編集
<h1>Hello#index</h1> <p>Find me in app/views/hello/index.html.erb</p> <%= @msg %> <!-- この行を追加-->
「@msg」はテンプレート変数でコントローラのアクションメソッドから値が渡される。
3.「rails server」をたたく
とめていなければ実行する必要はない。
4.ブラウザで「http://localhost:3000/hello/index」へアクセス
テンプレートで記述されている「Hello#index」「Find me in app/views/hello/index.html.erb」と
テンプレート変数で引き渡した「Hello World !」が表示される。
ビュー(V)の変更
helloコントローラクラスのindexでテンプレート変数を使用すると「views/hello/index.html.erb」のERBテンプレートが自動的に選択される。 コントロールクラスで
render '[PATH]'
を記述するとテンプレートを指定することができる。
PATHは「/app/views」ディレクトリからの相対パスで記載し、.html.erbは省略する。
1.ビュー用のテンプレートファイル(views/hello/sampleView.html.erb)を作成
<h1>Sample View Page</h1> <%= @msg %>
★ERBテンプレートは文字コードをUTF-8で保存する。
2.コントローラクラス(hello_controller.rb)を編集
class HelloController < ApplicationController def index # render text: 'Hello World !' @msg = 'Hello World !' render 'hello/sampleView' # この行を追加 end end
3.「rails server」をたたく
とめていなければ実行する必要はない。
4.ブラウザで「http://localhost:3000/hello/index」へアクセス
ブラウザで表示されたページのソースを見ると「Sample View Page」と表示されて、先ほど自作したテンプレートが使用されていることがわかる。
表示されたページをソースで見ると、なにやらその他にたくさんhtmlタグが追加されている。
これはレイアウトテンプレートというものが使用されている。
「app/views/layouts/application.html.erb」を見ると「<%= yield %>」という部分があり、ここに作成したテンプレートが適用されるようになっている。
されにstylesheetやjavascriptはコントローラ単位でディレクトリがわけられて作成されたものが自動反映されるようになっている。
レイアウトの自動反映がイヤな場合は「application.html.erb」を削除もしくはリネームする。
モデル(M)の作成
Rails標準のO/RマッパーであるActive Recoredが使用できる。
■rails generate modelコマンド
rails generate model NAME [field[:type][:index] field[:type][:index]] [options]
- NAEM
- モデル名
- 「[NameSpace]/モデル名」とスラッシュで区切ると名前空間を設定できる。
- 名前空間を設定するとディレクトリが分割されたり、名前空間名のプレフィックスがついたりする
- field[:type][:index]
- フィールド名、データ型、インデックスを指定
- type(データ型)には以下が指定できる
- integer
- primary_key
- decimal
- float
- boolean
- binary
- string
- text
- date
- time
- datetime
- timestamp
- index(インデックス)には以下が指定できる
- unique
- index
■rails generate modelコマンドのオプション
- 「--skip-namespace」/「--no-skip-namespace」
- 名前空間設定がスキップされる(デフォルト:スキップしない)
- 「-o [NAME]」「--orm=[NAME]」
- 使用するO/Rマッパーを指定(デフォルト:active_record)
■Active Recordのオプション
- 「--migration」/「--no-migration」
- マイグレーションファイルを作成するか否か(デフォ:する)
- 「--timestamps」/「--no-timestamps」
- タイムスタンプ列(created_at、updated_at)を作成するか否か(デフォ:する)
- 「--parent=[PARENT]」
- モデルの親クラスを指定
- 「--indexes」/「--no-indexes」
- 外部キーにインデックスを付与するか否か(デフォ:する)
- 「-t [NAME]」「--test-framework=[NAME]」
- 使用するテスティングフレームワークを指定(デフォ:test_unit)
■TestUnitのオプション
- 「--fixture」/「--no-fixture」
- フィクスチャを生成するか否か(デフォ:する)
- 「-r [NAME]」「--fixture-replacement=[NAME]」
- フィクスチァを変更する
1.「C:\rubyWorkspace\sample」へcd
2.「rails generate model user no:string name:string age:integer birthday:date active:boolean」をたたく
以下のようにファイルが更新される。
invoke active_record create db/migrate/20161103065150_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml
3.「rake db:migrate」をたたく
Railsにはマイグレーションというテーブルの作成・変更を行う機能がある。
マイグレーションを実行するためのファイルは「db/migrate/20161103065150_create_users.rb」に自動生成されている。
class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| t.string :no t.string :name t.integer :age t.date :birthday t.boolean :active t.timestamps end end end
4.「rake db:fixtures:load FIXTURES=users」をたたく
Railsにはフィクスチャという機能があり、DBへテスト用データを下敷きする機能がある。
フィクスチャを実行するためのファイルは「test/fixtures/user.yml」に自動生成されている。
one: 'no': MyString name: MyString age: 1 birthday: 2016-11-03 active: false two: 'no': MyString name: MyString age: 1 birthday: 2016-11-03 active: false
また、Railsでは「rails dbconsole」というコマンドでDBクライアントを起動することができる。
> rails dbconsole SQLite version 3.15.0 2016-10-14 10:20:30 Enter ".help" for usage hints. sqlite> .tables ar_internal_metadata schema_migrations users sqlite> .schema users CREATE TABLE "users" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "no" varchar, "name" varchar, "age" integer, "birthday" date, "active" boolean, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL ); sqlite> select * from users; 298486374|MyString|MyString|1|2016-11-03|f|2016-11-03 06:55:13.749144|2016-11-03 06:55:13.749144 980190962|MyString|MyString|1|2016-11-03|f|2016-11-03 06:55:13.749144|2016-11-03 06:55:13.749144 sqlite> .quit
※見やすくちょっとフォーマット変更している。
上記を確認するとわかるが、以下のフィールドが自動付与されている。 - id - 自動で連番になる主キー - created_at - レコードの作成日時 - updated_at - レコードの更新日時
5.コントローラクラス(hello_controller.rb)を編集
DBから全レコード取得するロジックを書く。
class HelloController < ApplicationController def index # render text: 'Hello World !' @msg = 'Hello World !' render 'hello/sampleView' end # 以下、追加メソッド def users @users = User.all end end
6.ビュー用のテンプレートファイル(views/hello/users.html.erb)を手動で作成
コントローラで取得したデータをテーブルで表示する。
<table border='1'> <tr> <th>No</th> <th>名前</th> <th>年齢</th> <th>アクティブユーザ?</th> </tr> <% @users.each do |user| %> <tr> <td><%= user.no %></td> <td><%= user.name %></td> <td><%= user.age %></td> <td><%= user.active %></td> <tr> <% end %> </table>
7.ルーティングの設定(/config/routes.rb)
Rails.application.routes.draw do get 'hello/index' get 'hello/users' # この行を追加 end
8.「rails server」をたたく
とめていなければ実行する必要はない。
9.ブラウザで「http://localhost:3000/hello/users」へアクセス
■補足 データベースの設定は「config/database.yml」にある。
用語メモ
- gem
- Rubyライブラリのパッケージ管理システム
- Lunuxでいうaptやyumみたいなもの
- Rubyライブラリのパッケージ管理システム
- bundler
- gemを管理する仕組み
- Gemfileでgemパッケージのバージョン指定などが行える
- Rake
- Rubyで記述された様々なタスクをコマンド実行できるツール
- RVM(Ruby Version Manager)
- 複数バージョンのRuby実行環境を共存させる仕組み
参考
Ruby on Rails開発環境作成
自分はJava屋、そしてここは自分用のメモページ。
例によって例のごとく細かい(Javaで出てくる)用語の説明はない。
実行環境構築 on Windows
1.Rubyのインストール
- 「http://rubyinstaller.org/downloads/」からインストーラをダウンロードしてインストール
- ここでは「rubyinstaller-2.3.1.exe」を使用
- 「ruby -v」をたたいてバージョン情報がでればおk
2.DevKitのインストール
- Windows環境でNativeなC/C++拡張コードをビルドするために必要らしい
- Railsインストール、rails newコマンドでアプリを作成する際に必要らしい
- 「http://rubyinstaller.org/downloads/」からダウンロード
- ここでは「DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe」を使用
- 「C:\Ruby23-x64\devkit」を作成し、上記exeを配置・実行すると展開される
- 「C:\Ruby23-x64\devkit」へcdして下記を実行
- 「ruby dk.rb init」
- 「ruby dk.rb install」
3.Node.jsのインストール
- 「http://nodejs.org/download/」からインストーラをダウンロードしてインストール
- ここでは「node-v0.10.28-x86.msi」を使用
- 「node -v」をたたいてバージョン情報がでればおk
4.Ruby on Railsのインストール
- プロキシ設定
- gem installはwebからパッケージを取得するのでプロキシ環境の場合は設定が必要
- 「set http_proxy=http://[ユーザ名]:[パスワード]@[プロキシサーバエンドポイント]:[ポート]」
- 「set https_proxy=https://[ユーザ名]:[パスワード]@[プロキシサーバエンドポイント]:[ポート]」
- ※gemはrubyとセットでインストールされている
- 「gem install rails」でインストール
- 「gem install rails -v [バージョン]」でバージョン指定可能
- SSHのエラーが出てインストール出来なかったときは下記を実行
- 「
gem install rubygems-update --source http://rubygems.org/」 - 「update_rubygems」
- 「
- 「rails -v」をたたいてバージョン情報がでればおk
- ここでは「Rails 5.0.0.1」だった
5.SQLiteのインストール
SQLiteじゃなくていいけど、RailsデフォルトだしDB接続のサンプル書きたいからとりあえずインストール
- 「http://www.sqlite.org/download.html」からzipをダウンロード
- ここでは「sqlite-dll-win64-x64-3150000.zip」を使用
- 上記を展開するとDLLがあるのでそれを「C:\Ruby23-x64\bin」へ配置する
- 「gem install sqlite3」でSQLiteをインストール
- 「gem search --local sqlite3」で確認
コマンドラインツールが欲しい場合は以下も。
- 「http://www.sqlite.org/download.html」からzipをダウンロード
- ここでは「sqlite-tools-win32-x86-3150000.zip」を使用
- 好みもあるが「C:\SQLite3」ディレクトリを作成して上記を解凍したexeを置く
- 上記のパスを通して「sqlite3 -version」をたたいてバージョン情報がでればおk
SpringでHello World(Java-based Configuration版)
SpringでHelloWorldを出力するプロジェクトの作成してみる。
なお、Spring Bootの機能およびXMLは使用せず、Java-based configurationを使用する。
XMLベースで作成する場合は以下。
SPRING INITIALIZRで下記を指定して作成。
- Maven Project
- Spring Boot:1.4.1
- Group:com.pepese.sample
- Artigact:SpringHelloWorld
- Name:SpringHelloWorld
- Description:sample
- Package Name:com.pepese.sample
- Packaging:Jar
- Java Version:1.8
- Language:Java
- Dependencies:指定無し
SPRING INITIALIZRについては以下参考。
下記のpom.xmlが入ったプロジェクトが生成される。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.pepese.sample</groupId> <artifactId>SpringHelloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SpringHelloWorld</name> <description>sample</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
src/main/java配下に以下のクラスを作成する。
- com.pepese.sample.HelloWorld
- インターフェース。
- com.pepese.sample.HelloWorldImpl
- 上記の実装クラス。
- com.pepese.sample.SpringHelloWorldConfig
- Java-based Configurationクラス。
- com.pepese.sample.SpringHelloWorldApplication
- mainメソッドを持つクラス。
package com.pepese.sample; public interface HelloWorld { void sayHello();
package com.pepese.sample; public class HelloWorldImpl implements HelloWorld { @Override public void sayHello() { System.out.println("Hello World !"); } }
package com.pepese.sample; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringHelloWorldConfig { @Bean public HelloWorld helloWorld() { return new HelloWorldImpl(); } }
package com.pepese.sample; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class SpringHelloWorldApplication { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(SpringHelloWorldConfig.class); HelloWorld helloWorld = (HelloWorld) context.getBean(HelloWorldImpl.class); helloWorld.sayHello(); } }
「mvn package -Dmaven.test.skip=true」および「java -jar target\SpringHelloWorld-0.0.1-SNAPSHOT.jar」コマンドで実行する。
参考:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/
SpringでHello World(XML版)
SpringでHelloWorldを出力するプロジェクトの作成してみる。
なお、Spring Bootの機能およびJava-based configurationは使用せず、XMLを使用する。
Java-based Configurationベースで作成する場合は以下。
blog.pepese.com
SPRING INITIALIZRで下記を指定して作成。
- Maven Project
- Spring Boot:1.4.1
- Group:com.pepese.sample
- Artigact:SpringHelloWorld
- Name:SpringHelloWorld
- Description:sample
- Package Name:com.pepese.sample
- Packaging:Jar
- Java Version:1.8
- Language:Java
- Dependencies:指定無し
SPRING INITIALIZRについては以下参考。
下記のpom.xmlが入ったプロジェクトが生成される。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.pepese.sample</groupId> <artifactId>SpringHelloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SpringHelloWorld</name> <description>sample</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
src/main/java配下に以下のクラスを作成する。
- com.pepese.sample.HelloWorld
- インターフェース。
- com.pepese.sample.HelloWorldImpl
- 上記の実装クラス。
- com.pepese.sample.SpringHelloWorldApplication
- mainメソッドを持つクラス。
package com.pepese.sample; public interface HelloWorld { void sayHello();
package com.pepese.sample; public class HelloWorldImpl implements HelloWorld { @Override public void sayHello() { System.out.println("Hello World !"); } }
package com.pepese.sample; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringHelloWorldApplication { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"bean.xml"}); HelloWorld helloWorld = (HelloWorld) context.getBean("HelloWorld"); helloWorld.sayHello(); } }
src/main/resources配下に下記のbean.xmlを作成する。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="HelloWorld" class="com.pepese.sample.HelloWorldImpl" /> </beans>
「mvn package -Dmaven.test.skip=true」および「java -jar target\SpringHelloWorld-0.0.1-SNAPSHOT.jar」コマンドで実行する。
参考:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/