오늘의 취준/오늘의 공부

[SpringBoot] 스프링 컨테이너

gogoem 2023. 6. 29. 21:04
728x90

스프링 컨테이너 : 서버가 시작될 때 함께 시작되는 클래스들을 담는 공간

스프링 빈 : 스프링 컨테이너에 담겨있는 각각의 클래스

 

왜 사용하는지?

스프링 컨테이너는 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를 적어 우선순위를 정해줌.