Controller
- Controller는 Service를 통해서 데이터를 조회해야함
- 이런 관계를 의존관계가 있다 라고함
스프링 컨테이너 & 스프링 빈
- 스프링 컨테이너
- 스프링 빈의 생명주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할
- 일반적으로는 new 생성자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸
- 스프링 컨테이너는 위의 역할을 대신해준다 → 제어 흐름을 외부에서 관리하게 된다.
- 객체들 간의 의존 관계를 런타임 과정에서 자동으로 만들어준다.
- 스프링 빈
- 스프링 컨테이너에 의해 관리되는 자바 객체를 의미
- 스프링 빈을 등록하는 방법
- 컴포넌트 스캔
- @Controller, @Repository, @Service 사용, 이들은 @Component를 내장
- 위 어노테이션이 있으면 객체를 하나씩 생성해 컨테이너에 저장
- 직접 스프링 빈 등록
- hellospring 패키지 아래 SpringConfig라는 클래스 생성
- @Configuration을 사용하여 SpringConfig 클래스를 빈 설정 클래스로 변경
- @Bean을 붙혀 빈에 등록되도록 설정함
- 이후 메모리 방식이 아닌 DB방식으로 수정할 때 설정파일만 변경하면 변경완료
- 유지보수에 용이
- 컴포넌트 스캔
어노테이션
@Autowired
- @Autowired로 설정한 메서드 자동호출 → 인스턴스 자동 주입
- 필요한 의존 객체의 타입에 해당하는 빈을 컨테이너에서 찾아 주입한다.
- 이를 DI(Dependency Injection), 의존성 주입 이라고 한다.
- 타입 종류
- 생성자 → 권장하는 방식
- setter
- 필드
@Configuration
- 해당 클래스를 빈 설정을 담당하는 클래스로 변경