public class InlineExamConsole implements ExamConsole {
@Autowired
@Qualifier("exam")
@Override
public void setExam(Exam exam) {
System.out.println("setter");
this.exam = exam;
}
}
<context:annotation-config/>
@Component // 객체 생성을 위해 어노테이션 추가
public class InlineExamConsole implements ExamConsole {
@Autowired
@Qualifier("exam")
@Override
public void setExam(Exam exam) {
System.out.println("setter");
this.exam = exam;
}
}
<context:component-scan base-package="spring.di.ui"></context:component-scan>
// component-scan이 객체를 생성하면서 Autowired는 자동으로 읽기 때문에 <context:annotation-config/>는 필요가 없다.
ExamConsole console = (ExamConsole)context.getBean(ExamConsole.class)
ExamConsole console= (ExamConsole)context.getBean("console");
1번 파일은 @Component만 사용해도 객체를 생성한다.
하지만 2번 파일은 ID를 통해 불러오기 때문에 "console"을 찾지 못해 생성을 하지 못한다.
따라서 @Component에 값을 주어 해결한다.
@Component("console")
public class InlineExamConsole implements ExamConsole {
Spring에서 생성되지 않고 관여가 아예 안 되어있음.
이 클래스를 읽게 해 줄 명령 필요
xml : context:component-scan base-package="사용할 패키지(복수 가능)"
해당 패키지에 있는 @Component가 달린 클래스의 객체를 생성
그러나 이런 자바 프로그램의 클래스를 객체화하는 데 쓰는 건 개념상으로 맞지 않다
기본 값을 설정하기 위한 어노테이션
Component를 사용해도 상관없지만 각각의 역할의 쓰인다고 구분을 하기위해 세분화하게 되었다.