백엔드/Spring

Spring - 어노테이션으로 객체 생성 | TIL_157

ran4 2022. 10. 26. 23:31

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" />