依存注入
9786 ワード
DIとは何ですか。
Dependency Injection. 依存性注入とも呼ばれる.
依存オブジェクトBが変化すると、Aに影響します.
次のコードはハンバーガー店を例に挙げます.
一般依存関係
「ハンバーガー店シェフがハンバーガーレシピに頼る」は簡単な言葉です.ハンバーガーレシピがなければ、シェフは料理ができません.レシピを修正したり、他のハンバーガーを作ったりする必要がある場合は、シェフは料理方法を修正しなければなりません.レシピがシェフに影響を及ぼしているので、シェフはレシピに依存しています.そう言ってもいいです.
class BurgerChef {
private BurgerRecipe burgerRecipe;
public BurgerChef() {
this.burgerRecipe = new BurgerRecipe();
}
}
上記のコードのように、BurgerChefはBurgerRecipeに依存します.より多くの処方箋を依存させるためには,以下のコードのように依存関係をインタフェースとして抽象化する必要がある.class BurgerChef {
private BurgerRecipe burgerRecipe;
public BurgerChef() {
this.burgerRecipe = new BurgerRecipe();
//this.burgerRecipe = new ChickenBurgerRecipe();
//this.burgerRecipe = new CheeseBurgerRecipe();
}
}
interface BurgerRecipe(){
newBurger();
}
class NewBurgerRecipe implements BurgerRecipe(){
public Burger newBurger(){
return Hamburger();
}
}
依存注入方式
依存性をインタフェースとして抽象化すれば,コックはより多様な依存関係を持つことができる.(より多くのメニューを選ぶことができます)この方法はシェフが内部でハンバーガーのレシピを決め、外部から直接メニューを選んでシェフに直接頼む(注入する)としたら?
△スレ主が自分で料理を選んだら?
ジェネレータ使用DI
class BurgerChef { // 생성자를 이용한 DI
private BurgerRecipe burgerRecipe;
public BurgerChef(BurgerRecipe burgerRecipe) {
this.burgerRecipe = burgerRecipe;
}
}
class BurgerShopOwner {
private Burgerchef burgerchef = new BurgerChef(new NewBurgerRecipe());
public void changeMenu(){
burgerchef = new BurgerChef(new CheeseBurgerRecipe());
}
}
このようにコードを書くと、ハンバーガーシェフはハンバーガー店の店主が注入したメニューを作ります.この手法を依存注入と呼ぶ.それ以外にも、Setter(メソッド)を使ったDIやフィールドインジェクションなど多くのDI方式がありますが、Springではジェネレータを使う方式がおすすめです.
使用方法のDI
class BurgerChef { //메소드(setter)를 사용한 DI
private BurgerRecipe burgerRecipe = new BurgerRecipe();
public void setBurgerRecipe(BurgerRecipe burgerRecipe){
this.burgerRecipe = burgerRecipe;
}
}
class BurgerShopOwner {
private Burgerchef burgerchef = new BurgerChef();
public void changeMenu(){
burgerChef.setBurgerRecipe(new cheeseBurgerRecipe());
}
}
長所
整理する
ソース
https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
https://mangkyu.tistory.com/125
Reference
この問題について(依存注入), 我々は、より多くの情報をここで見つけました https://velog.io/@whitecloud94/Dependency-Injection의존성-주입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol