13 컴포넌트스캔

이연희·2022년 1월 23일
0

Spring

목록 보기
13/105
post-custom-banner

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
공부기록
post-custom-banner

0개의 댓글