스프링이 실행될 때 스프링 컨테이너라는 통이 생성된다.
@Controller 어노테이션이 있으면 MemberController 객체를 생성해서 컨테이너에 넣어두고 스프링이 빈으로 관리한다.
스프링 빈 등록하는 2가지 방법
- Component Scan
@Component: 컨테이너에 스프링 빈으로 등록하는 어노테이션
@Service, @Controller, @Repository에 @Component가 포함되어 있다.
@Autowired: 객체를 연결시키는 어노테이션 (연관관계 설정)
컴포넌트 스캔은 실행되는 Application과 같은 패키지 하위 내에서만 작동한다.
스프링은 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다 -> 유일하게 하나만 만들어서 공유 - 자바 코드로 직접 스프링 빈 등록
Controller를 제외한 Service, Repository에서 컴포넌트 등록 어노테이션과 Autowired 어노테이션을 제거한다.
SpringConfig 클래스 생성
@Configuration 어노테이션을 통해 객체를 읽고 @Bean 어노테이션으로 빈 등록
@Configuration
public class SpringConfig {
@Bean
public MemberService service() {
return new MemberService(repository());
}
@Bean
public MemberRepository repository() {
return new MemoryMemberRepository();
}
}
DI 종류
- 생성자 주입
- 필드 주입
- setter 주입 -> public으로 노출되어서 객체 불변성 보장 안 됨
정형화된 코드는 컴포넌트 스캔 사용, 정형화되어있지 않거나 상황에 따라 구현 클래스를 변경해야 하는 경우 설정을 통해 스프링 빈으로 등록한다.
'인프런 강의 > 김영한 Spring' 카테고리의 다른 글
[Spring Boot] AOP (0) | 2023.12.19 |
---|---|
[Spring Boot] 회원 예제 만들기 (3) - 스프링 DB 접근 기술 (0) | 2023.11.25 |
[Spring Boot] 회원 예제 만들기 (2) - 웹 MVC 개발 (1) | 2023.11.25 |
[Spring Boot] 회원 예제 만들기 (1) - BackEnd 개발 (1) | 2023.11.25 |
[Spring MVC] 정적 컨텐츠, 템플릿 엔진, API (0) | 2023.11.24 |