https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T
스프링 강의를 듣고 정리한 내용입니다
어노테이션 생성 계기
이전까지는 소스 코드를 바꾸지 않고 결합 상태를 변경을 하기 위해
xml에 설정을 따로 빼놓는 방식을 사용했다
<bean id="b" class="data.B2" />
<bean id="console" class="service.S">
<property name="b" ref="b" />
</bean>
생성할 객체를 B3로 바꾸기 위해서는 위의 설정을 바꾸어야 한다
<bean id="b" class="data.B3" />
※ 객체를 바꾸었을 때 설정도 함께 바꿀 수 없을까?
-> 코드에 메타데이터를 추가한다
-> 어노테이션을 사용하게 된 계기이다
스프링의 어노테이션
@Component 라는 어노테이션을 B2객체와 B3 객체에 붙이면
스프링이 코드를 읽은 후 객체화 한다
-> 최근에는 설정을 분리할 때 xml대신 어노테이션의 방식이 자주 사용된다.
xml에서 구현한 InlineExamConsole 객체를 어노테이션으로 바꾸기
<bean id="exam" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" />
<bean id="console" class="spring.di.ui.InlineExamConsole">
<property name="exam" ref="exam" />
</bean>
property는 아래와 같이 어노테이션으로 바꿀 수 있다
<property name="exam" ref="exam" />
↓
@Autowired
private Exam exam;
InlineExamConsole 클래스
@Autowired //자동으로 객체를 연결한다
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
-> @Autowired를 선언하면 자동으로 찾으면서 객체를 생성해준다
출력 결과 : NullPointerException 발생
-> 특별한 지시 없이는 객체 속의 @Autowired를 찾지 못한다
해결을 위한 xml 설정 추가
<!-- context namespace를 추가 -->
xmlns:context="http://www.springframework.org/schema/context"
<!-- 선언 -->
<context:annotation-config />
<bean id="console" class=“spring.di.ui.InlineExamConsole" />
'백엔드 > Spring' 카테고리의 다른 글
Spring - @Autowired(required) | TIL_156 (0) | 2022.10.24 |
---|---|
Spring - @Autowired의 참조 기준 | TIL_155 (0) | 2022.10.22 |
Spring - Collection 생성&목록 DI | TIL_153 (0) | 2022.10.17 |
Spring - 생성자 DI | TIL_152 (0) | 2022.10.12 |
Spring - 값 형식 DI | TIL_151 (0) | 2022.10.10 |