・コードを書く
■Artist.java
package com.example.demo.di;
public interface Artist {
String getFirstAlbumName();//ファーストアルバム名を返す
}
■LedZeppelin.java
package com.example.demo.di;
public class LedZeppelin implements Artist {
@Override
public String getFirstAlbumName() {//ファーストアルバム名を返す
return “Led Zeppelin1”;
}
}
■ShowAlbum.java
package com.example.demo.di;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(“/”)
public class ShowAlbum {
@RequestMapping(“/album”)
public String album(Model model){
インタフェースを使っている理由はこの鉄板のデザイン・パターンの為。
例えばEricClaptonクラスを作成すれば、Artist artist = new EricClapton();この1行のみを変更するだけで、これ以降artist変数はEricClaptonとして振る舞う。
・アプリを起動する
//①この意味はインタフェースで変数を作成し実装クラスをその変数に代入している
Artist artist = new LedZeppelin();
String str = artist.getFirstAlbumName();
model.addAttribute(“albumName”,str);
return “/album”;
}
}
・画面表示する
http://localhost:8080/album
2.次にDIを使うが実践的でない使う意味の無いサンプルを示す
・ShowAlbum.javaを以下の様に書き換える
■ShowAlbum.java
package com.example.demo.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(“/”)
public class ShowAlbum {
@Autowired //このアノテーションでartistにLedZeppelinが代入される
private Artist artist;
@RequestMapping(“/album”)
public String album(Model model){
//Artist artist = new LedZeppelin(); //削除
String str = artist.getFirstAlbumName();
model.addAttribute(“albumName”,str);
return “/album”;
}
}
・LedZeppelin.javaを以下の様に書き換える
■LedZeppelin.java
package com.example.demo.di;
import org.springframework.stereotype.Component;
@Component//このアノテーションでDIで管理される
public class LedZeppelin implements Artist {
@Override
public String getFirstAlbumName() {//ファーストアルバム名を返す
return “Led Zeppelin1”;
}
}
・画面表示する
http://localhost:8080/album
3.最後にDIを使い本番クラスと開発クラスを切り替える現場で必須のサンプルを示す
・LedZeppelin.javaを以下の様に書き換える
■LedZeppelin.java
package com.example.demo.di;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile(“default”)//Profileアノテーションで本番用defaultとして本番識別する
public class LedZeppelin implements Artist {
@Override
public String getFirstAlbumName() {//ファーストアルバム名を返す
return “Led Zeppelin1”;
}
}
・パッケージ com.example.demo.testを作成する
・そのパッケージにテスト用のLedZeppelin.javaを作成する
■テスト用のLedZeppelin.java
package com.example.demo.test;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile(develop)//Profileアノテーションでテスト用developとしてテスト識別する
public class LedZeppelin implements Artist {
@Override
public String getFirstAlbumName() {//ファーストアルバム名を返す
return “Test”;
}
}
・application.propatiesに以下を追加する(↓はテストクラスが動く)
■application.propaties
spring.profiles.active=develop
・こんな感じになる
・画面を表示する。(Testが表示される)
以上
