컨테이너 : 내부에 또 다른 컴포넌트를 가지고 있는 어떤 컴포넌트를 의미
스프링 컨테이너
// Annotation
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// XML
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
빈(bean)은 인스턴스화된 객체를 의미. (스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다)
스프링의 다양한 설정 형식
을 추상화
한 것
-> 스프링 컨테이너는 BeanDefinition이라는 추상화를 통해 Spring Bean을 생성한다
즉, 스프링이 설정 메타정보를 BeanDefinition 인터페이스를 통해 관리하기 때문에 컨테이너 설정을 XML, Java로 할 수 있는 것이다.
NoUniqueBeanDefinitionException:
expected single matching bean but found 2: userServiceImpl,userService
// 에러 발생이 일어난 코드
UserService userService = ac.getBean(UserService.class);
-> @Bean 해놨던 부분을 지우지 않고 @Component 추가해서 문제 발생(@Bean, @Component 두가지 조회됨)
참고) @Bean은 메서드 이름으로 등록되기 때문에
ac.getBean("userService", UserService.class); 와 같이 쓰면 나오고,
@Component는 클래스 이름의 첫 문자를 소문자로 바꾼 것이 이름이 되기 때문에 아래와 같이 쓰면 나온다.
ac.getBean("userServiceImpl", UserService.class);