스프링 컨테이너 : 서버가 시작될 때 함께 시작되는 클래스들을 담는 공간
스프링 빈 : 스프링 컨테이너에 담겨있는 각각의 클래스
왜 사용하는지?
스프링 컨테이너는 Service를 대신 인스턴스화 해 주고, 그 과정에서 자동으로 Repository 파일을 결정해준다.
스프링 컨테이너를 사용하지 않고 controller, service, repository 의 구조를 가진 코드를 구현하려면,
controller 가 service 를 받기 위해서는 > private final NameService nameRepository = new NameService();
service 가 repository 를 받기 위해서는 > private final NameRepository nameRepository = new NameRepository();
와 같은 방법으로 받을 클래스를 인스턴스화 해 준 후, nameService.method(); 와 같은 형태로 접근해야 했다.
하지만 스프링 컨테이너를 사용하면 구현체를 전달할 Repository 구현체를 변경해야 할 때, 일일히 Service의 구현체(new ...) 코드를 변경하지 않아도
어노테이션
controller : @Controller / @RestController 등.
Service : @Service
Repository : @Repository
IOC(제어의 역전, Inversion of Control) : 자용자가 new 를 사용하여 어떤 구현체가 사용될 지를 선택하는 게 아니라 컨테이너가 결정하는 것.
DI(의존성 주입, Dependency Injection) : 컨테이너가 특정 구현체를 선택해 넣어주는 과정.
Repository가 여러 개 일 때, @Repository 위에 @Primary를 적어 우선순위를 정해줌.
'오늘의 취준 > 오늘의 공부' 카테고리의 다른 글
[Git/Intellij] 인텔리제이-깃허브 연동하기 (0) | 2023.07.28 |
---|---|
[Java] 오류/The import java.util.Collections cannot be resolvedJava (0) | 2023.07.06 |
[JAVA] String 문자열 연결 연산자 vs ArrayList .add 시간복잡도 비교 (0) | 2023.06.27 |
[JAVA] 익명 클래스 (0) | 2023.06.02 |
[MySQL] Command Line Client 사용/ 명령어 정리 (0) | 2023.05.31 |