ComponentScan으로 편리하게 설정을 관리하자

박경현·2023년 3월 9일
0

지금까지는스프링 Bean을 등록할때 @Bean으로 직접 등록해주었다

하지만 이게 10개가 아닌 100000개라면?
개발자라면 반복은 피하자!

그래서 스프링이 설정정보를 직접 안적어도 스프링 빈으로 등록을 해주는 Component Scan기능을 제공한다

의존관계 주입은 Autowired로!!

AppConfig - @Bean을 사용한 경우!

@Configuration
public Class AppConfig {
	@Bean
    public MemberService memberService() {
    	return new MemberServiceImpl(memberRepository());
    }
    @Bean
    public MemberRepository memberRepository() {
    	return new MemoryMemberRepository();
    }

}

이렇게 AppConfig라는 클래스 안에 수동으로 스프링 빈 등록과 함께
의존관계도 주입해주었다!!

AutoAppConfig - ComponentScan으로 빈 등록 간소화

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

이러면 AutoAppConfig에서 작성할 부분은 끝났다!

위에 보이는 @ComponentScan이 @Component 붙은 클래스 찾아서 전부 빈으로 등록!

이러면 이 클래스는 memberServiceImpl라는 이름으로 스프링 빈 등록이 되고
객체는 MemberServiceImpl을 가지게 된다!

스프링 빈 등록은 Component Scan으로 해결, 의존성 주입은? => Autowired!!

의존성 주입이 필요한 객체에 대해서 생성자 위에 @Autowired를 작성하면
스프링이 자동으로 빈 객체들을 뒤져서 의존성을 주입해준다!!

차고로 @ComponentScan을 사용하면 따로 설정에서 코드를 안적으니까
의존주입도 수동으로 못함! -> Autowired 반강제

그렇다면 ComponentScan은 어디부터 위치를 찾아서 스프링 빈에 등록을 할까?

@ComponentScan (
	basePackages = {"hello.core.member","hello.core.order"}
    basePackageClasses = AutoAppConfig.class // 이러면 내 위치부터 찾음!
)

만약에 위치를 지정 안하게 된다면 모든 경로를 다 뒤질 수도 있다!!

AppConfig 놓는 위치 - > 프로젝트의 시작 루트에 놔둬라!

com.hello
com.hello.service
com.hello.repository 가 있다고 할때 com.hello에 AppConfig를 둠!

그러면 따로 저런거 안적어도 여기부터 아래로 차례로 자동으로 뒤진다!

프로젝트 시작 루트 위치에 두자!

컴포넌트 스캔의 기본 대상

@Component 뿐 아니라

@Controller - spring mvc컨트롤러로 인식
@Service, - 데이터 접근 계층으로 인식
@Repository, - 특별 처리는 없지만 개발자들끼리 비지니스 로직 계층 파트라고 인지
@Configuration

다 @Component를 가지고 있다!

중복등록과 충돌 / 컴포넌트에서 같은 빈 이름 등록되면?

자동 빈 등록 vs 자동 빈 등록 ->spring이 오류를 발생!
수동 빈 등록 vs 자동 빈 등록
Overriding bean Definition -> 걍 수동이 우선권을 가짐!, 수동빈이 자동빈으로 오버라이딩!
이거 버그 잡기 엄청어려움!! -> 그래서 스프링부트가 두 개 부딪히면 에러나게 바뀜!!

!!!!어노테이션에는 상속관계가 없다!!!!
붙였다고 연동되는 것이 아니라 -> 자바가 인식하는게 아닌 스프링이 지원하는 기능!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글