🔸@Bean, XML의 < bean >을 통해서 스프링 빈을 직접 등록하는 방법을 사용했다.
🔸하지만 등록해야할 스프링 빈이 수백개가 된다면..?
➡️ 스프링이 설정 정보가 없어도 자동으로 스프링 빈을 등록할 수 있도록 @ComponentScan이라는 기능을 제공한다.
➡️ 더불어 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다.
🔸 @ComponentScan : @Component가 붙은 클래스들을 다 찾아서 스프링 빈으로 자동으로 등록해준다.
🔸 @ComponentScan과 @Autowired 사용== 설정 클래스 == @Configuration @ComponentScan public class AppConfig{} == 서비스 클래스 == @Component public class MemberServiceImpl implements MemberService{ @Autowired public MemberServiceImpl(MemberRepository memberRepository){ this.memberRepository = memberRepository; }
🔸 기존의 AppConfig와의 차이점은 @Bean을 사용해서 등록한 스프링 빈 클래스가 하나도 없다.
🔸 사용할 때는 기존과 동일하다.ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = ac.getBean(MemberService.class);
🔸@ComponentScan은 어디서부터 스프링 빈을 찾아야 할 지 시작위치를 지정할 수 있다.
🔸기본값 : @ComponentScan이 붙은 설정 정보 클래스의 패키지부터 그 하위의 모든 클래스@ComponentScan(basePackages="hello.core.member") @ComponentScan(basePackages={"hello.core", "hello.servlet"})
@Component : 컴포넌트 스캔이 찾는 기본 대상
@Configuration : 스프링 설정정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
@Controller : 스프링 MVC컨트롤러로 인식
@Repository : 스프링 데이터 접근 계층으로 인식하고 데이터 계층의 예외를 스프링 예외로 변환해준다.
@Service : 스프링 비지니스 로직에서 사용(특별한 처리X, 다만 개발자들이 핵심 비지니스 로직이 있는
클래스라는 걸 인식하는 데 도움)