14.어노테이션을 통한 객체 생성
어노테이션을 이용한 객체생성
- 객체 생성과 Component
<context:component-scan base-package="spring.di.ui"></context:component-scan>
패키지에서 component을 찾아서 객체좀 만들어주겟니라는 의미의 지시를 가진다
1.이름으로 Component 해주기
ExamConsole console = (ExamConsole) context.getBean("console");// 이름으로
이름으로 Component을 할 경우
@Component("console")
public class InlineExamConsole implements ExamConsole {
componet다음 이름을 지정 해야한다!!!
2.형식으로 Component해주기
ExamConsole console = context.getBean(ExamConsole.class); // 형식으로
@Component
public class InlineExamConsole implements ExamConsole {
exam에 객체를 생성해보면 어떻게 될까? 두개의 패키지를 사용 해야 할 경우
package spring.di.entity;
import org.springframework.stereotype.Component;
@Component //exam 객체 만들기
public class NewlecExam implements Exam {
<context:component-scan base-package="spring.di.ui"></context:component-scan>
xml의 Componet 태그를 보면 spring.di.ui까지 찾기 떄문에 spring.di.entity는 찾지 못한다 에러 발생 그러면 어떻게 찾게 해야할까? 퀄러파이 사용될경우 이름 지정 해야한다
스캔 범주를 바꾼다
<context:component-scan base-package="spring.di.ui, spring.di.entity"></context:component-scan>
total is 0, avg is 0.000000
일단 무조건 바인딩되게 설정을 변경한다(true)
@Autowired(required = true) // 무조건 바인딩이 되야한다
// @Qualifier("exam2")
private Exam exam;
<context:component-scan base-package="spring.di.ui"></context:component-scan>
true로 되어있으므로 무조건 바인딩이 되야하는데 객체가 없으므로 에러가 발생한다
다시 스캔범주를 바꾸면
<context:component-scan base-package="spring.di.ui, spring.di.entity"></context:component-scan>
total is 0, avg is 0.000000
출력이 된다 여기서는 널값이아닌 exam의 값이 0이라서 위가 출력된다
댓글남기기