컴포넌트 스캔과 자동의존관계설정
- 어노테이션을 보고 스프링 컨테이너에 등록 및 연결 (@AutoWired)
- @Component 애노테이션이 있으면 스프링 빈으로 자동등록
(@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.) - @Component를 포함하는 애노테이션 : @Controller, @Service, @Repository
- 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록 (유일하게 하나만 등록하여 공유)
따라서 같은 스프링 빈이면 모두 같은 인스턴스
@Controller 어노테이션이 있을 경우 스프링이 따로 관리를 한다.
여러 곳에서 쓰이는 객체는 생성 후 스프링 컨테이너에 보관해서 같이 쓴다. 매번 new를 쓰지 않아도 되는 장점!
@Autowired : Controller와 Service 연결 MemberController가 생성 될 때 Spring Bean의 Member Service를 주입해줌 (DI)
@Controller // 객체 생성 후 스프링 컨테이너에 담아두고 관리
public class MemberController {
private final MemberService memberService;
@Autowired // Controller와 Service 연결 MemberController가 생성 될 때 Spring Bean의 Member Service를 주입해줌 (DI)
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired // (생성자 주입)
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
자바 코드로 직접 스프링 빈 등록하기
@Controller는 컴포턴트 스캔을 해야함
Service와 Repository는 @Bean을 사용해서 상호 등록을 해준다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
'SpringFramework > SpringBoot 기초' 카테고리의 다른 글
[SpringBoot] 스프링 DB 접근 기술 (0) | 2021.12.11 |
---|---|
[SpringBoot] 웹 MVC 개발 (0) | 2021.12.07 |
[SpringBoot] 스프링 백엔드 개발 예제 - 회원 서비스 (0) | 2021.12.06 |
[IntelliJ] 모든 단축키 모음 (0) | 2021.12.04 |
[SpringBoot] Spring 웹 개발 기초 - MVC (0) | 2021.12.01 |
댓글