-
[Spring] Annotation을 이용한 객체생성프로그래밍 공부/Spring 2021. 4. 30. 22:18
뉴렉처 강사님의 동영상 강의를 정리한 글입니다.
@Component
: 객체화 하고 싶은 클래스 위에 넣어준다.
xml의 context:annotation-config 설정 태그는, 객체를 생성할 때 객체 생성 코드 안에 어노테이션이 있는지 보라는 것이다.
어노테이션을 이용하여 객체를 생성하게 되면, xml에서 객체 생성하는 코드가 제거되어 위의 설정으로는 어노테이션을 확인 할 수가 없다.
따라서 context:component-scan 설정 태그를 추가하여, 어노테이션으로 생성되는 객체가 있는지를 확인하도록 해야 한다.
<context:component-scan base-package="spring.di.ui"/>
=> spring.di.ui 패키지 안의 클래스 중 component 어노테이션이 붙은 클래스를 찾아 객체화 한다!
객체화 할 때, 객체 생성 코드 안의 어노테이션 설정을 찾는 과정이 진행되기 때문에
annotation-config 설정 태그는 필요 없게 된다.
한편, 생성된 객체를 xml을 통해 메인함수로 받아올 때 방법은 두가지가 있다.
1. 인터페이스를 지정하고, 지정된 인터페이스에 해당하는 객체 찾기 -> 찾아진 객체가 여러개라면 에러 발생!
ExamConsole console = context.getBean(ExamConsole.class);
2. 객체 이름으로 찾기
ExamConsole console = (ExamConsole)context.getBean("console");
=> @Component 어노테이션을 통해 객체를 생성한 경우 객체의 이름이 따로 없음! @Component("console") 방법으로 이름 부여할 수 있다.
InlineExamConsole.java
package spring.di.ui; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import spring.di.entity.Exam; @Component("console") public class InlineExamConsole implements ExamConsole { @Autowired @Qualifier("exam2") private Exam exam; public InlineExamConsole() { System.out.println("constructor"); } public InlineExamConsole(Exam exam) { System.out.println("overloaded constructor"); this.exam = exam; } @Override public void print() { System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg()); } @Override public void setExam(Exam exam) { System.out.println("setter"); this.exam = exam; } }
InlineExamConsole 객체가 생성될 때 Autowired에 의해 Exam 객체를 DI 한다.
따라서 exam 객체에도 component 어노테이션을 추가하자.
위 코드에서 "exam2" 이름의 객체를 받아오고 있으니, @Component("exam2")를 NewlecExam 클래스 위에 넣어주면 된다.
'프로그래밍 공부 > Spring' 카테고리의 다른 글
[Spring] Java Configuration (0) 2021.05.05 [Spring] @Component의 종류와 시멘틱 @Component (0) 2021.04.30 [Spring] @Autowired의 위치와 Required 옵션 (0) 2021.04.30 [Spring] @Autowired와 @Qualifier (0) 2021.04.30 [Spring] Annotation 이용의 장점과 @Autowired를 이용한 DI (0) 2021.04.30