백엔드/Spring

Spring - 어노테이션의 장점 | TIL_154

ran4 2022. 10. 20. 23:20

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