@ComponentScan 탄생배경
기존 스프링에서 빈을 등록할때 하나하나 @Bean 어노테이션을 사용하여 등록을 수동으로 해주어야했다. 하지만 이렇게 수동으로 하는방식은 너무너무 귀찮다아아ㅏ…!!!! 지겨워지겨워 알아서해줘어ㅓㅓㅓ 그래서 나온게 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan 이라는 어노테이션이 등장!!
@ComponentScan 역할
스프링 구동시 @Component 어노테이션이 붙은 클래스를 모두 읽어서 자동으로 빈 등록을 해준다. 이때 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. 직접 지정하고 싶다면 @Component(”merryChristmas”) 이렇게 직접 명시해주면 된다. 또한, @ComponentScan 이 붙은 클래스 하위 패키지의 폴더에 있는 @Component 어노테이션들을 읽는다.
❗❗❗ SpringBoot는 Main 클래스에서 @SpringBootApplication 어노테이션을 기본적으로 제공하는데 이 하위에 @ComponentScan 어노테이션이 있어서 자동으로 하위 패키지 모든 폴더의 @Component 를 읽어준다. 이것이 사수가 나한테 질문한 답…. 저는 ComponentScan이라는걸 써준적이없는데 왜일까요? 숙제. 한것의 답일듯… 엄청 어려운건줄알고 쫄앗,,
또 아래 어노테이션들이 붙어 있는 클래스 역시 @Component가 들어있는 어노테이션들이라 컴포넌트스캔 대상 어노테이션들이다. @Component 컴포넌트 스캔에서 사용. @Controller 스프링 MVC 컨트롤러에서 사용. 스프링 MVC 컨트롤러로 인식. @Service 스프링 비즈니스 로직에서 사용. 사실 특별한 처리를 하는 어노테이션은 아니고, 개발자들이 핵심 비즈니스 로직이 여기에 있구나 라고 인식하는데 도움이 된다. @Repository 스프링 데이터 접근 계층에서 사용. 데이터 계층의 예외를 스프링 예오로 변환해준다. @Configuration 스프링 설정 정보에서 사용. 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
@Autowired
@Component 를 사용하게 되면 자동으로 @Autowired를 사용할수밖에 없게된다. 이유는 @ComponentScan을 할때 자동으로 빈 등록이 되어 수동으로 빈 등록을 할 수 없게되는데 생성자 위에 @Autowired 를 붙여주게되면 생성자를 생성할때 자동으로 ApplicationContext 가 파라미터로 들어온 애들을 의존관계로 주입을 시켜준다. 즉, 생성자에서 의존관계를 한번에 여러개 주입 받을 수 있다.
참고
인프런 - 김영한의 스프링 기본편
'Spring' 카테고리의 다른 글
조회 빈이 2개 이상일 때 해결방법! (0) | 2022.06.04 |
---|---|
[Springboot] Execution failed for task ':test' 에러 해결방법 (0) | 2022.06.04 |
의존관계가 아닐때 옵셔널처리 (0) | 2022.06.04 |
의존관계 주입방법 (0) | 2022.06.04 |
자동 빈 VS 수동 빈 충돌!!! (0) | 2022.05.27 |
댓글