소스코드로 옮기는작업을 하는것이다.
Component-scan이 꼭 필요함을 알려줌.
"spring.di.ui"라는 패키지 안에 들어가서 클래스들이 있을텐데, 거기 들어가서 클래스 읽어줄래?
스캔해봐서 component가 있는지 찾아봐. 거기 컴포넌트가 있으면 객체화 시켜줘.
@Component를 읽으면 안쪽에 있는 걸(Autowired부분) 읽어버림.
따라서 XML부분에서는 객체 생성하는부분을 다 지워버린다.
만약 Component로 이름을 설정하지 않고 생성자를 호출하려면
주석처리한 부분처럼 ExamConsole.class라는 객체를 골라야만 생성이된다.
객체생성후 초기값을 어떻게 넣어주나?
@Value(값)을 사용하면 객체생성시 초기값을 넣어줄수있다.
그런데, 저렇게 초기값설정하고 객체생성하는것이 비효율적으로 보이는데 왜 Component를 사용하나?
웹 어플리케이션을 만들때, Componet에서 더 세부적으로 보면 특화된 기능을 사용할 수 있다.
객체화하고자 하는 클래스가 어떤 것인지 명시화 할 수 있다.
Spring MVC에서 각각의 구성마다 다른 컴포넌트(컨트롤러,서비스,레포지터리)를 넣어준다.
Entity, Model등은 일반적으로 @Componet를 붙여서 생성하지 않는다.
이름을 명시적으로 사용한다!!
남이만든 클래스를 소스코드를 갖고있지 않으므로 Controller를 어노테이션 붙여서 생성불가.
그렇다면? Spring을 XML로 만들어야되냐? ㄴㄴ 모든것들을 다 XML에서 제외해버리고 다 어노테이션(Annotation)으로 만들어버림.
그럼 Config 자체가 JAVA로 만들어버리고, XML을 지워버릴 수 있다. 다음글..참고..
'웹(Web) > 백엔드(Backend)' 카테고리의 다른 글
객체지향 디자인패턴1 feat.예시로 이해 (0) | 2021.04.25 |
---|---|
스프링 XML --> JAVA Configuration으로 변경 (0) | 2021.04.19 |
스프링 어노테이션(Annotation), @AutoWired과 @Qualifer (0) | 2021.04.16 |
스프링 IoC 컨테이너 사용(ApplicationContext 사용) (0) | 2021.04.05 |
IoC컨테이너(Inversion of Control)란 (0) | 2021.04.04 |