본문 바로가기
JavaScript/Spring

[Springframework] 의존성 주입과 어노테이션 (@Autowired)

by Alkaloid 2022. 2. 8.
반응형
반응형

@AutoWired @Inject @Qualifier @Resource 

위 4개의 공통점은 무엇일까요? @라는 녀석이 붙어있습니다.

 

@는 어노테이션을 의미합니다. 즉, 무언가 해주는 녀석입니다. 단순하게 단어앞에 @ 붙어있지만, 히든속성? 히든정보? 가 담겨있습니다.

그럼 각각 무엇인지 살펴보도록 하겠습니다.

 

@AutoWired 주로 변수위에 붙여 설정하며, 자동으로 해당 객체를 찾아 할당한다.

해당 어노테이션의 설명에는 변수 위라고 되어있지만, [주로]입니다. 메소드나 멤버변수 심지어 생성자 위에도 사용할 수 가 있습니다.

하지만 일련의 약속이라고 보시면 될거같아요. 이 어노테이션은 주로 변수 위에 쓴다! 무언의 약속? 과 같습니다.

 

그럼 어떤식으로 동작하는지 알려드리겠습니다.

스프링에 컨테이너는 @AutoWired를 보게되는 순간 ㅐ당 변수의 타입을 체크하게 됩니다. 그리고 메모리에 객체가 존재하는지 확인을 하고, 객체를 변수에 주입시킵니다.

그럼 메모리에 객체가 없다면 컨테이너는 어떡할까요?

NoSuchBeanDefinitionException이라는 오류를 띄워주게 됩니다. 오류를 자세히 보시면

caused by:어쩌구~~~라고 써져있는데 그부분이 오류내용이예요! 

만약 오류에 저런 오류가 뜬다면 아 ~ 메모리에 객체가 없구나! 라고 생각하시면 됩니다.

 

이런 방식을쓰면 앞에서 했던 tv예제(setter사용해서 의존성주입했던 글 )에서 생성자와 setter는 필요가 없어집니다.

그럼 바로위 메모리에 객체가 있고 없고를 어떻게 아는지? 생성하는방법이 존재하는지? 가 궁금하실 거라고 생각이 됩니다.

 

우리는 그런 방법을 알고있어요.

바로 xml에 bean을 등록하는거죠.

<bean id="apple" class="프로젝트 풀경로"></bean>

이렇게요! 그리고 AppleSpeaker파일에서 @AutoWired를 써주기만 하면 됩니다.

 

 

 

많이 복잡한거 같죠? 저도 한번에 많은 양의 정보를 알려드리고 싶지만, 하나하나 머리속에서 정리하고, 외워서 공부하는것보다는 이해하고 사용하는게 좋은 공부법이라고 생각을 하기 때문에 하나하나 나눠 올리게 되었습니다.

한번에 많은양을 하면서 빨리 끝내는건 좋은 습관은 아닌거같아요. 조금을 하더라도 이해하고, 외울수있는게(단어나, 왜쓰는지) 제일 좋다고 생각이 됩니다.

반응형