
@Component
public class MemberServiceImpl implements MemberService {
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
@Autowired 는 의존관계를 자동으로 주입해준다 @Autowired 를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다
@ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다.모든 자바 클래스를 다 스캔하면 비효율적이기 때문에 필요한 위치부터 탐색하도록 시작한다
@ComponentScan(
basePackages = "hello.core",
}
@Component : 컴포넌트 스캔에서 사용@Controlller : 스프링 MVC 컨트롤러에서 사용@Service : 스프링 비즈니스 로직에서 사용@Repository : 스프링 데이터 접근 계층에서 사용@Configuration : 스프링 설정 정보에서 사용어노테이션에는 상속관계라는 것이 없다. 그래서 이렇게 어노테이션이 특정 어노테이션을 들고
있는 것을 인식할 수 있는 것은 자바 언어가 지원하는 기능은 아니고, 스프링이 지원하는 기능이다.
컴포넌트 스캔의 용도 뿐만 아니라 다음 애노테이션이 있으면 스프링은 부가 기능을 수행한다.
@Controller : 스프링 MVC 컨트롤러로 인식@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.@Configuration : 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.@Service : 특별한 처리를 하지는 않는다. 대신 개발자들이 핵심 비즈니스 로직이 여기에 있겠구나 라고 비즈니스 계층을 인식하는데 도움이 된다.includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.ConflictingBeanDefinitionException 예외 발생Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true