-
컴포넌트 스캔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 : 컴포넌트 스캔에서 제외할 대상을 지정
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
빈 생명주기 콜백 (0) 2022.08.06 의존관계 자동 주입 (0) 2022.08.06 싱글톤 컨테이너 (0) 2022.08.04 스프링 컨테이너와 스프링 빈 (0) 2022.08.04 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) 2022.08.03