본문 바로가기
Spring

@ComponentScan 과 @Autowired

by 개발자사랑이 2022. 6. 4.

 

@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 가 파라미터로 들어온 애들을 의존관계로 주입을 시켜준다. 즉, 생성자에서 의존관계를 한번에 여러개 주입 받을 수 있다.

 

 

 

 

 

 

참고


인프런 - 김영한의 스프링 기본편

 

 

댓글