https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T
스프링 강의를 듣고 정리한 내용입니다
객체를 어노테이션으로 생성하기
▷ @Component를 이용한다
InlineExamConsole 클래스
@Component
class InlineExamConsole {
@Autowired//@Autowired(required=false)
private Exam exam;
@Autowired
public void setExam(Exam exam) {
this.exam = exam;
}
}
해당 코드만으로는 객체가 만들어지지 않는다
→ 클래스를 읽어오는 설정이 필요하다
component-scan을 이용하여 지정한 컴포넌트를 읽어올 수 있도록 만들어야 한다
setting.xml
<context:component-scan base-package="spring.di.ui" />
<!-- <context:annotation-config /> 의 역할도 수행하기 때문에 불필요하다-->
<bean id="exam" class="entity.NewlecExam" />
Program 클래스
//오류 x
ExamConsole console = context.getBean(ExamConsole.class);
//오류발생
ExamConsole console = (ExamConsole) context.getBean("console");
console.print();
오류가 발생하는 코드의 경우 실행시 No bean named ‘console’ 에러가 발생한다
해결법
1. 컴포넌트에서 이름을 지정한다
@Component("console")
class InlineExamConsole {
...
}
2. @Autowired가 될 수 있도록 Exam 객체를 만든다
NewlecExam 클래스
@Component
public class NewlecExam implements Exam {
...
}
Component의 이름을 지정하지 않아도 오류가 발생하지 않는다
-> 컴포넌트를 찾지 못했기 때문이다
-> component-scan에서 해당 패키지 지정해야한다
setting.xml 수정
<context:component-scan base-package="spring.di.ui, spring.di.entity" />
'백엔드 > Spring' 카테고리의 다른 글
Spring - 어노테이션으로 값 초기화, 설정 | TIL_158 (0) | 2022.11.01 |
---|---|
Spring - @Autowired(required) | TIL_156 (0) | 2022.10.24 |
Spring - @Autowired의 참조 기준 | TIL_155 (0) | 2022.10.22 |
Spring - 어노테이션의 장점 | TIL_154 (0) | 2022.10.20 |
Spring - Collection 생성&목록 DI | TIL_153 (0) | 2022.10.17 |