전체글236 [스프링 핵심 원리 - 기본편] 필터 includeFilters: 컴포넌트 스캔 대상을 추가로 지정합니다. excludeFilters: 컴포넌트 스캔에서 제외할 대상을 지정합니다. 설정 정보와 전체 테스트 코드 public class ComponentFilterAppConfigTest { @Test void filterScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); assertThat(beanA).isNotNull(); assertThrows( NoSuchBeanDefinitionExcept.. 2021. 9. 19. [스프링 핵심 원리 - 기본편] 탐색 위치와 기본 스캔 대상 탐색할 패키지의 시작 위치 지정 모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸립니다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있습니다. @ComponentScan( basePackages = "hello.core", } basePackages: 탐색할 패키지의 시작 위치를 지정합니다. 이 패키지를 포함해서 하위 패키지를 모두 탐색합니다. basePackages = {"hello.core", "hello.service"} 이렇게 여러 시작 위치를 지정할 수도 있습니다. 만약 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 됩니다. 권장하는 방법 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것입니다.. 2021. 9. 19. [스프링 핵심 원리 - 기본편] 컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링 빈을 자바 코드나 XML 등을 통해서 설정 정보에 직접 등록할 경우 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생합니다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공합니다. 또 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공합니다. AutoAppConfig.java @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 먼저.. 2021. 9. 19. [스프링 핵심 원리 - 기본편] @Configuration과 바이트코드 조작의 마법 스프링 컨테이너는 싱글톤 레지스트리입니다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 합니다. 그래서 스프링은 클래스의 바이트코드를 조작하는 라이브러리를 사용합니다. 모든 비밀은 @Configuration을 적용한 AppConfig에 있습니다. @Test void configurationDeep() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); AppConfig bean = ac.getBean(AppConfig.class); System.out.println("bean = " + bean.getClass()); } 사실 AnnotationConfigApplicationC.. 2021. 9. 18. 이전 1 ··· 18 19 20 21 22 23 24 ··· 59 다음