Spring Boot (Maven)

스프링부트 백그라운드8 ( 빈 간의 의존성 설정 ) - 권장

pjh8838 2024. 6. 9. 20:17
반응형

의존성 설정

  - 구조

      DeptService
      @Service                                @Repository
      DeptServiceImpl ---------------> DeptDAO

      DeptDAO dao;
      public DeptServiceImpl(DeptDAO dao){
         this.dao = dao;
      }

  1) 묵시적으로 설정 방법

    가. 생성자 이용 (권장방법)
      DeptDAO dao;
      public DeptServiceImpl(DeptDAO dao){
         this.dao = dao;
      }
  
      - 권장방법
        권장이유는 하나의 블럭에서 모든 주입이 완료됨.
         또한 주입받는 시점이 생성시점이기 때문에 @Autowired 보다 훨씬 빠름.
      - 기본생성자는 반드시 없어야 됨.


    나. 어노테이션 이용
      - @Autowired 
 
      예> 
        @Autowired
DeptDAO deptDAO;

 

 


실습

 

그림 설명

=> DeptDAO 빈 생성하면 IoC 컨테이너 바구니 안에 DeptDAO가 생성됨

=> 서비스 빈 생성하면 IoC 컨테이너 바구니 안에 DeptServiceImpl 생성됨

=> ServiceImpl 생성자 파라미터로 DeptDAO를 넣음, DeptServiceImpl는 DeptDAO를 가진 채로 생성됨

=> 우리가 최종적으로 얻어야 할 건 IoC Container -> 컨테이너 실체는 ApplicationContext니까 ApplicationContext을 통해 빈에 접근한다

IoC 컨테이너 접근

 

 

DeptDAO, DeptService 두 개의 빈 생성 후에 Application.java 작성

 

IoC 컨테이너에 빈 생성 ( @Repository,  @Service  로 마킹을 했기 때문)

 

=> 이제 서비스임플을 생성하려면 생성자가 필요한데,  생성자 파라미터로 DeptDAO

=> 서비스는 DeptDAO를 갖고 생성됨

 

=> 메인스타트인 application.java에서 서비스임플을 접근해야함

-> 접근하려면 IoC컨테이너를 참조해야하는데 IoC의 본체는 ApplicationContext 

 

 

 

IoC 컨테이너 ctx에서 안에 있는 빈을 참조 할 수 있다

ctx만 적었을 때는 null이고 값을 받아야함 => 생성자 주입 ( 생성자 안에서 IoC컨테이너 안에 빈을 참조 할수 있다 )

 

728x90
반응형