13 컴포넌트스캔
Controller를 통해서 외부 요청을 받고, Service에서 비지니스 로직을 만들고, Repository에서 데이터를 저장(정형화된 패턴)
- Controller 객체가 스프링 컨테이너 안에 존재
- Controller와 관련있는 기능들이 동작
- 스프링이 관리
- HelloController는 스프링이 뜰 때 스프링 컨테이너에 등록됨
- 아래 코드일 때 등록이 안되는 이유: MemberService는 순수한 자바 코드이기 때문에
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired//스프링이 스프링 컨테이너에 있는 memberService와 연결시켜 주는 역할
public MemberController(MemberService memberService){//생성자로 한번 등록함
this.memberService=memberService;
}
}
- 해결방안: @Service, @Repository
//MemberSerivce.java
@Service
public class MemberService {
private final MemberRepository memberRepository;
}
//MemberRepository.java
@Repository
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();//메모리 저장소
private static long sequence = 0L;
}
@Component는 스프링 빈에 등록하는 과정이고, @Autowired는 서로간의 연관 관계를 설정하는 역할
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정: @Controller, @Service, @Repository
- 자바 코드로 직접 스프링 빈 등록하기
- 컴포넌트 스캔과 자동 의존관계 설정
- @Component 어노테이션이 있으면 스프링 빈으로 자동 등록
- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문임
- @Component를 포함하는 다음 어노테이셔도 스프링 빈으로 자동 등록된다: @Controller, @Service, @Repository
Tip) 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다. (유일하게 하나만 등록해서 공유) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
Author And Source
이 문제에 관하여(13 컴포넌트스캔), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yh_lee/13-컴포넌트스캔저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)