스프링/1. 스프링 핵심 원리

29강. 컴포넌트 스캔

sdafdq 2023. 7. 20. 22:19

각 구현체클래스에

@Component 붙여두면

 

 

@Configuration
@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Configuration.class)
)
public class AutoAppConfig {

}

이렇게 @ComponentScan 달아두면 저 @Component 붙여둔거 다 찾아서 빈으로 등록시켜 줌..

@ComponentScan에 저거는 필터인데, 저거 빼고 등록시켜준다는 거임.

참고로 각 구현체의 생성자에 @Autowired 달아야 자동 의존관계 주입해줌. Bean Container에서 찾아서 넣어줌.

 

 

 

실무에서는 저렇게 필터는 안하는데, 

 

@Configuration
    static class ExtendsConfig{
        @Bean
        public DiscountPolicy rateDiscountPolicy(){
            return new RateDiscountPolicy();
        }
        @Bean
        public DiscountPolicy fixDiscountPolicy(){
            return new FixDiscountPolicy();
        }
    }

이렇게 테스트 한다고 해둔게 있어서..

 

 

 

여튼 저렇게 컴포넌트 스캔으로 빈에 등록하면 자동으로 등록되고, bean 이름은 Component 붙인 구현체 이름..

에서 앞에 소문자로 memberServiceImpl 이런 식으로..

그리고 이름도 @Component("memberService") 이런 식으로 할 수는 있음..

 

 

근데 나 솔직히 이거 안 쓸듯.. 구현체 이름이 bean 이름으로 되는 것도 별로고, 한눈에 의존관계 보이지도 않고, 갈아끼울때도 일일히 들어가서 @Component 지우고.. 등등