코딩성장스토리

스프링 컨포넌트스캔 본문

백 엔드/spring

스프링 컨포넌트스캔

까르르꿍꿍 2022. 2. 15. 23:45

스프링에 전에 배운 스프링 빈을 사용할 때 모든 클래스에 빈을 등록해야한다.

즉 빈을 반복적으로 추가하는 것은 비효율적이다.

그로므로 존재하는게 컨포넌트스캔(Conponentscan)이다.

@Conponentscan을 쓸려면 빈에 입력이될 객체 위해 @Component를 적어야한다.

주의점(Configuration이 들어간 모든 것을 빈에 넣기 때문에 주의해서 뺼건 빼줘야한다,

또한, 스프링빈에 입력이 될떄 클래스명 앞글자가 소문자로 변한다 ex)Member -> member)

밑에 코드를 보자

@Configuration
@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes=Configuration.class)//appconfig와 충돌 안시키게 뺴주기
)
public class AutoAppConfig {
}

@Component
public class RateDiscountPolicy implements DiscountPolicy{

@Component
public class MemoryMemberRepository implements MemberRepository{

@Component
public class MemberServiceImpl implements MemberService {

 

여기서 조심해야할 것은 의존성 주입이 된 클래스를 빈으로 어떻게 넣는 것이다.

빈에 넣을때는 주입이될 객체가 명시되어 있지만 @Component안에서 명시가 안되어 있다.

이럴때 필요한게 @Autowired 이고 의존성 주입이 될 위에 적으면 자동주입이 된다.

코드를 보자

@Component
public class MemberServiceImpl implements MemberService {

    private final MemberRepository memberRepository;

    @Autowired
    public  MemberServiceImpl(MemberRepository memberRepository){
        this.memberRepository= memberRepository;
    }
    @Override
    public void join(Member member) {
        memberRepository.save(member);
    }

    @Override
    public Member findMember(Long memberId) {
        return memberRepository.findById(memberId);
    }

}

컴포넌트 스캔의 용도 뿐만 아니라 다음 애노테이션이 있으면 스프링은 부가 기능을 수행한다.
@Controller : 스프링 MVC 컨트롤러로 인식
@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
@Configuration : 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가
처리를 한다.
@Service : 사실 @Service 는 특별한 처리를 하지 않는다. 대신 개발자들이 핵심 비즈니스 로직이 여기에
있겠구나 라고 비즈니스 계층을 인식하는데 도움이 된다.

 

필터
includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.

@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes =
MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes =
MyExcludeComponent.class)
)

'백 엔드 > spring' 카테고리의 다른 글

스프링 빈 스코프  (0) 2022.02.20
스프링 의존관계 자동 주입  (0) 2022.02.17
스프링 싱글톤  (0) 2022.02.15
스프링 IOC,DI,컨테이너  (0) 2022.02.14
spring 도전기  (1) 2021.12.08