일단 실행이 되면 스프링 컨테이너는 @SpringBootApplication이 달린 경로부터 시작으로 모든 하위경로를 검색한다.

 

이떄 @Component 어노테이션을 달고있는 객체들은 모두 자동으로 생성되어 스프링 컨테이너에 보관된다. 이러한 방식을 컴포턴트 스캔이라고 한다.

(기본적으로 싱글톤 방식을 사용해 각 컴포넌트 객체는 하나씩만 존재한다.)

 

@Controller, @Service, @Repository 모두 내부적으로 @Component를 포함하고 있다.

 

 

A 클래스가 B 클래스의 객체를 멤버로 사용할 경우 A가 B에 의존성을 갖고 있다고 표현한다.

이때 A 내부에서 B 객체를 직접 생성하는 방식으로 사용하지 않는다.

@Autowired를 사용해 생성자에서 객체를 전달받는데, 이를 의존성 주입(DI : Dependency Injection) 중에서도 생성자 주입이라고 한다.

주의해야할 점은 의존성이 엮여있는 모든 클래스를 전부 다 처리해줘야 제대로 동작한다는 것이다.

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

 

 

출처 : www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

+ Recent posts