TIL

[TIL] 2022.01.23 Spring 공부

na_o 2022. 1. 23. 23:08
728x90

https://nazero.tistory.com/225

 

Spring) 스프링 빈과 의존관계

 

nazero.tistory.com

 

블로그에 내용 정리하는데에 너무 신경 써서 시간을 너무 잡아먹더라

그래서 강의자료에 필기한 내용을 올렸다

 

요약 :

해당 클래스의 생성자에 다른 클래스를 주입하는 코드를 작성하고, 그 생성자 위에 @Autowired를 달아주면

스프링 컨테이너에 미리 등록되어있는 객체를 생성자에 주입해준다

이것이 DI(Dependency Injection : 의존성 주입) 

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

@Autowired 안 달아주면 의존성 주입 안됨

이 생성자가 Controller - Service - Repository 사이의 연결고리 역할임

 

 

프로젝트를 실행할 때 스프링 컨테이너가 객체를 미리 생성해둬서 대기타고 있는다

미리 만들어둔 객체 중 하나가 필요한 순간이 오면 새로 객체를 만드는 것이 아닌, 

스프링컨테이너에 담겨있는 객체를 스프링이 알아서 가져다가 쓴다

그 전에 스프링 컨테이너에 객체(빈)를 등록해야 하는데, 두 가지 방법이 있다

 

[스프링 컨테이너에 빈 등록 방법]

  • 어노테이션을 활용해서 등록하는 방법
    • 컨트롤러는 @Controller, 서비스는 @Service, 리포지토리는 @Repository 어노테이션을 사용하면 된다
    • 이 세 어노테이션은 @Component 어노테이션을 포함하고 있다
    • 결국, 빈 등록 방법은 @Component 어노테이션을 사용하면 된다
    • 주의) 냅다 @Component를 사용하면 안된다. @SpringBootApplication 어노테이션이 있는, 프로젝트 생성 시 기본으로 만들어지는 '~Application' 클래스가 위치해있는 패키지의 하위에 있는 클래스들만 등록할 수 있다. @SpringBootApplication을 까보면, @ComponentScan 어노테이션이 있는데, 얘가 빈 등록을 해준다
  • 코드로 직접 작성하여 등록하는 방법
    • 클래스 위에 @Configuration 어노테이션을 적어주고, 생성한 객체를 리턴하는 메소드 위에 @Bean 어노테이션을 적어주면 그 객체는 빈 등록 성공!

 

[의존성 주입의 종류]

  • 필드 주입 
    • @Controller
      public class MemberController {
      	@Autowired
      	private final MemberService memberService;
      }
  • 생성자 주입
    • 권장하는 방법
    • @Controller
      public class MemberController {
      	private final MemberService memberService;
          
          @Autowired
          public MemberController(MemberService memberService) {
          	this.memberService = memberService;
          }
      }
  • setter 주입
    • @Controller
      public class MemberController {
      	private final MemberService memberService;
          
          @Autowired
          public void setController(MemberService memberService) {
          	this.memberService = memberService;
          }
      }

'TIL' 카테고리의 다른 글

[TIL] 2022.01.27 면접 질문 정리  (0) 2022.01.28
[TIL] 2022.01.26 Java 공부 / 면접 질문 정리  (0) 2022.01.26
[TIL] 2022.01.22 Spring 공부  (0) 2022.01.23
[TIL] 2022.01.21 Spring 공부 - API  (0) 2022.01.21
[TIL] 2022.01.20 JPA 공부  (0) 2022.01.20