728x90
https://nazero.tistory.com/225
블로그에 내용 정리하는데에 너무 신경 써서 시간을 너무 잡아먹더라
그래서 강의자료에 필기한 내용을 올렸다
요약 :
해당 클래스의 생성자에 다른 클래스를 주입하는 코드를 작성하고, 그 생성자 위에 @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 |