본문 바로가기
프로그래밍/SpringMVC_기초

회원관리 예제 - 5(컴포넌트 스캔과 자동 의존관계 설정) (어노테이션,싱글톤)

by ILove_NS_MoKa 2023. 10. 18.

 

컴포넌트 스캔과 자동 의존관계 설정

회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자

1
2
3
4
5
6
7
8
9
10
@Controller
public class Membercontroller {
    private final MemberService memberService;
 
    @Autowired
    //Di = 디펜더시 인젝션
    public Membercontroller(MemberService memberService){
        this.memberService = memberService;
    }
}
cs

 

 

생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.

이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.

이전 테스트에서는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다.

 

 

> 참고: helloController는 스프링이 제공하는 컨트롤러여서 스프링 빈으로 자동 등록된다

@Controller 가 있으면 자동 등록됨

 

스프링 빈을 등록하는 2가지 방법

1) 컴포넌트 스캔과 자동 의존관계 설정

2) 자바 코드로 직접 스프링 빈 등록하기

 

1)컴포넌트 스캔 원리

 

@Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.

@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.

 

@Component 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.

    @Controller

    @Service

    @Repository

 

> 참고: 생성자에 @Autowired 를 사용하면 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서

주입한다. 생성자가 1개만 있으면 @Autowired 는 생략할 수 있다.

 

 

memberService 와 memberRepository 가 스프링 컨테이너에 스프링 빈으로 등록되었다.

 

참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다

 

싱글톤(Singleton) 패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다
장점 - 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다

 


컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)

**하위패키지가 동일하거나, 하위 패키지가 아닌 애들은 springBin 으로 컴포넌트 스캔을 안한다.
(어떠한 설정을 해주면 가능, 그러나 기본적으로는 컴포넌트 스캔의 대상이 아님)