ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴포넌트 스캔
    Spring/스프링 핵심 원리 - 기본편 2022. 8. 5. 10:47

    [인프런] 스프링 핵심 원리 - 기본편

     

    @Component

    @Autowired

     

     

    📍 일일이 스프링 빈을 등록하는 것은 누락, 귀찮음 등의 문제 발생시킴!

    @Configuration
    @ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class))
    // 기존 코드를 수정하지 않고 남겨두기 위해 exclude함
    
    public class AutoAppConfig {
    }

    📎 @ComponentScan

             : @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록함

             : 사용하는 각 클래스에 @Component를 붙이면 됨

     

    📎@Autowired

            : 자동으로 의존관계 주입을 해줌

                ↪ 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입

            : 생성자에서 여러 의존관계도 한 번에 주입하는 것 가능

            : 기본 조회 전략은 타입이 같은 빈을 찾아서 주입하는 것 (getBean(MemberRepository.class))와 동일하다고 이해

    @Component
    public class MemberServiceImpl implements MemberService{
        private final MemberRepository memberRepository;
    
        @Autowired
        public MemberServiceImpl(MemberRepository memberRepository) {
            this.memberRepository = memberRepository;
        }
    ```

     

     

    📎모든 자바 컴포넌트를 전부 스캔하면 시간이 오래 걸리게 됨 => basePackages: 탐색 시작 위치 지정 가능

    📎패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단(프로젝트 시작 루트 위치)에 두는 것을 권장

    📎com.hello에 AppConfig 같은 메인 설정 정보를 두고, @ComponentScan 을 붙이는 방식

    📎스프링 부트를 사용하면 @SpringBootApplication을 프로젝트 시작 루트 위치에 두는 것이 관례(여기에 @ComponentScan이 들어있음)

    @ComponentScan(
        basePackages = "hello.core.member",
    )

    📌@ComponentScan은 다음을 추가로 포함하고 있음

    @Component : 컴포넌트 스캔에서 사용

    @Controller : 스프링 MVC 컨트롤러로 인식

    @Service : 스프링 비즈니스 로직에서 사용

    @Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해줌

    @Configuration : 스프링 설정 정보로 인식

    @Service : 특별한 처리를 하지 않음. 개발자들이 핵심 비즈니스 로직의 위치 인식에 도움을 주는 용도

     

    📌필터

    includeFilters : 컴포넌트 스캔 대상을 추가로 지정

    excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정

     

     

     

     

Designed by Tistory.