@Configuration과 @Bean 으로 스프링 컨테이너에 수동으로 등록해줄 수 있겠지만 그럼 일일이 등록하기엔 부담이 있을 수 있다.

@ComponentScan 으로 @Component가 붙은 것들을 빈에 등록해준다!


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

excludeFilters는 보면 알듯이 해당 어노테이션은 제외해주고 스캔하는건데 @Configuration도 타고 들어가면 @Component 붙어있어서 다른 AppConfig 스캔 제외 하려는 거임

빈으로 등록하는 건 알겠는데 의존관계 주입은 어떻게 할것인가~?!

해당 @Component가 붙어있는 클래스의 생성자에 @Autowired로 컴포넌트에 의존관계를 주입해줘야 한다!

아래 코드 보셈. @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);
    }
}

다음은 사진과 함께 컴포넌트 스캔 방식을 자세하게 알아보겠음!

image.png

@Component 스캔이 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록하는데,

빈 이름은 클래스의 이름에서 맨 앞글자만 소문자가 되는것이 특징이네!!