Spring/[inflearn]스프링 핵심 원리 - 기본편(35)
-
컴포넌트 스캔 - 필터
◎ 필터 -> 필터를 통해 컴포넌트 스캔 대상에서 추가 및 제거를 할 수 있다. -> includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다. -> excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다. -> 컴포넌트 스캔 대상에 추가할 애너테이션 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { } -> 컴포넌트 스캔 대상에서 제외할 애너테이션 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyExclude..
2023.07.17 -
컴포넌트 스캔 - 탐색 위치 & 기본 스캔 대상
◎ 탐색할 패키지 위치 지정 -> 모든 자바 클래스를 컴포넌트 스캔을 하면 시간이 오래 걸린다. -> 컴포넌트 스캔이 필요한 위치부터 탐색하도록 지정할 수 있다. @ComponentScan( basePackages ="practice.core.member", //member만 컴포넌트 스캔의 대상이 된다. basePackageClasses = AutoAppConfig.class, excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) // @Configuration이 붙은 클래스는 컴포넌트 스캔에서 제외 ) - basePackages : 탐색할 패키지의 시작 위치를 지정한다. 위 코..
2023.07.17 -
컴포넌트 스캔 - 컴포넌트 스캔 & 의존관계 자동 주입
◎ 컴포넌트 스캔(Component Scan) -> 지금까지 스프링 빈을 등록할 때 @Configuration이 붙은 설정 정보 클래스에서 메서드에 @Bean을 붙여 직접 스프링 빈을 등록했다. -> 만약 등록해야 할 스프링 빈이 굉장히 많다면 이전까지 직접 하나씩 스프링 빈을 등록하는 방식은 시간적으로 비효율적일 것이다. -> 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 기능인 컴포넌트 스캔을 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig {..
2023.07.17 -
@Configuration & 싱글톤
◎ Configuration과 싱글톤 -> AppConfig를 보면 memberService()에서 memberRepository()를 호출하고, 이걸 호출하면 new MemoryMemberRepository()를 호출한다. 또한 orderService()에서도 memberRepository()를 호출하고 이걸 호출하면 new MemoryMemberRepository()를 호출한다. -> 이렇게 되면 각각 다른 MemoryMemberRepository가 생성되면서 싱글톤이 깨지는 것처럼 보인다. -> 테스트 public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; //테스..
2023.07.14 -
싱글톤 컨테이너
◎ 싱글톤 컨테이너 -> 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서 객체 인스턴스를 싱글톤으로 관리한다. -> 지금까지 사용했던 스프링 빈이 싱글톤으로 관리되는 빈이다. -> 스프링 컨테이너는 싱글톤 패턴을 따로 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. -> 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 싱글톤 객체를 생성 & 관리하는 기능을 싱글톤 레지스트리라고 한다. -> 이전에 봤던 순수 자바 코드의 싱글톤 패턴의 문제점을 해결한다. -> 스프링 컨테이너를 사용하는 테스트 @Test @DisplayName("스프링 컨테이너와 싱글톤") void springContainer(){ AnnotationConfigApplicationContext ac = new AnnotationC..
2023.07.14 -
싱글톤
◎ 웹 애플리케이션과 싱글톤 -> 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 일반적으로 여러 고객이 동시에 요청을 한다. -> 사용자가 memberService를 요청하면 요청할 때마다 컨테이너에서 MemberService객체를 생성하여 memberService를 반환하게 된다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때마다 객체 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회 : 호출..
2023.07.14