13 컴포넌트스캔

이연희·2022년 1월 23일
0

Spring

목록 보기
13/105

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
  • 자바 코드로 직접 스프링 빈 등록하기
  1. 컴포넌트 스캔과 자동 의존관계 설정
  • @Component 어노테이션이 있으면 스프링 빈으로 자동 등록
  • @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문임
  • @Component를 포함하는 다음 어노테이셔도 스프링 빈으로 자동 등록된다: @Controller, @Service, @Repository

Tip) 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다. (유일하게 하나만 등록해서 공유) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.


스프링입문13(김영한)

profile
공부기록

0개의 댓글

관련 채용 정보