DI(dependency Injection)


この章では,スプリングにおける重要な概念である依存注入について述べる.
注入依存性の3つの方法,スプリングIoC容器,スペースの意味と登録方法を紹介した.

依存注入とは?


依存関係インジェクション(Dependency Injection)は、オブジェクトを直接作成するのではなく、インジェクションによって使用される依存関係インジェクション(New演算子)とも呼ばれます.
次のコードは,開発者がnew演算子を直接用いてオブジェクトを生成してコードを制御するコードである.

//배터리 일체형 
public Class ElectronicToy1 {

    private Battery battery;
    
    public ElectronicToy1(){
    	battery = new Battery();
    }
}    
次のコードは、Batteryという名前のオブジェクトがSpringコンテナによって管理されているbeanの場合、@Autowiredによってオブジェクトに注入されるコードです.

//배터리 분리형
public class ElectronicToy2 {
	
    @Autowired
    private Battery battery;
では,依存性注入を用いた理由は何でしょうか.
  • の再利用率が増加した.
  • のテストに使用します.
  • コード簡略化.
  • コードは毒性を増加させた.
  • 依存関係が減少(変更に敏感ではない).
  • 結合度は、凝集度を低下させながら向上させることができる.
  • オブジェクト間の依存関係を設定できます.
  • 依存性注入の3つの方法


    1)注入作成者
    public class TestService {
    
        private TestRepository testRepository;
        
        //스프링 4.3 부터는 클래스의 생성자가 하나이고, 
        //그 생성자로 주입 받을 객체가 빈으로 등록 되어 있다면
        //생성자 주입에서 @Autowired를 생략할 수 있음.
        @Autowired 
        public TestService(TestRespository testRepository) {
        	this.testRepository = testRepository;
        }
        
    }    
    2)現場注入
    public class TestService{
    	
        @Autowired
        private TestRepository testRepository;
        
    }    
    3)Setter注入
    
    public class TestService{
    
        private TestRepository testRepository;
        
        @Autowired
        public void setTestRepository(TestRepository testRepository){
        	this.testRepository = testRepository;
        }
    }    

    依存性をどのような方法で注入しますか?


    Spring framework referenceが推奨する方法は、2番目のジェネレータで注入することです.
    コンストラクション関数を使用する方法が優れているのは、使用する依存性がなければ、インスタンスを強制的に作成しないためです.

    IoC容器とは?

  • スプリングフレームワークは、オブジェクトの作成とライフサイクルを管理する機能も提供します.
  • IoCコンテナは、オブジェクトを作成し、依存性を管理します.
  • POJOを作成、初期化、サービス、および破棄する権限があります.
  • 開発者はPOJOを直接生成できるがコンテナに渡す.
  • *POJO:純粋なJavaオブジェクトを指し、通常は特定のJavaモデル、機能またはフレームワーク(getter/setter)に従わない

    beanって何?


    まず、スプリングは、オブジェクトの作成、消去などのライフサイクルを管理し、スプリングコンテナから必要なオブジェクトを取得できる軽量コンテナです.
    スプリングコンテナによってJavaオブジェクトが作成される場合、このオブジェクトはスプリングを空(bean)と呼びます.
    springbinとjavaの通常のオブジェクトとは異なり、springコンテナで作成されたオブジェクトをspringbinと呼びます.

    空白のタイプ


    @Component、@Service、@Controller、@Repository、@Bean、@Configurationなどを使用して必要な空きを登録し、必要な場所で@Autowiredで注入して使用します.

    参考資料
    https://jjunii486.tistory.com/84 ,
    https://atoz-develop.tistory.com/entry/Spring-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85DI-Dependency-Injection%EC%9D%98-%EC%84%B8%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95 ,
    https://cbw1030.tistory.com/54 ,
    https://devlog-wjdrbs96.tistory.com/165 ,
    https://siyoon210.tistory.com/120