본문 바로가기
프로그래밍/SPRING

[스프링 기본 : IoC 컨테이너] @Autowired

by hyunleeM 2019. 10. 6.

@Autowired

@Autowired 어노테이션을 상요하면 IoC 컨네티어 안에 존재하는 빈을 자동으로 찾아 주입시켜준다.(타입기준)

required : 기본값은 true (true 인경우 못찾으면 어플리케이션 구동 실패)

사용가능 위치

  • 생성자(스프링 4.3부터는 생략가능)
  • 세터
  • 필드
  • 파라미터
  • 어노테이션 타입

@Autowired 내부 

@Autowired setter 메소드에 사용

SampleRepository.java

SampleService.java

 

@Autowired required 확인

위 SampleRepository.java 에서 @Repository 제거후 실행

@Autowired 어노테이션은 기본값이 true이기 때문에 true인경우에는 위에서 설명한 바와같이 등록한 대상이 없으면 어플리케이션 구동이 실패한다 따라서 이런경우에는 required = false 선언을 해준다.

 

@Autowired 생성자

생성자에 사용시에는 생략이 가능하다.

아래와 같이 생성자에 @Autowired를 생략해도 sampleRepository를 주입받을수 있다.

@Autowired 필드

같은 타입의 빈이 여러개 일 경우

@Autowired대상이 되는 타입이 여러개인경우 : 동일한 인터페이스를 다수의 클래스에서 상속받은경우

SampleRepository.java( 인터페이스 )

SampleRepository1.java

SampleRepository2.java

실행결과

동일한 타입의 빈이 존재한다는 오류 

해결방법

@Primary

@Autowired 대상이 되는 클래스들중 우선적으로 주입이되길 원하는 클래스에 선언

 

@Qualifier

@Autowired 주입되는곳에 bean id(클래스명에서 맨앞자리 소문자) 지정해서 사용

 

해당 타입의 모든 빈 주입

List로 선언하면 모든 Bean리스트를 주입해줌

 

동작원리

빈 라이프 사이클

BeanPostProcessor

  •  새로 만든 빈 인스턴스를 수정할 수 있는 라이프 사이클 인터페이스

AutowiredAnnotationBeanPostProcessor extends BeanPostProcessor

  • 스프링이 제공하는 @Autowired와 @Value 어노테이션 그리고 JSR-330의 @Inject 어노테이션을 지원하는 어노테이션 처리기

 

 

 

참고자료

https://www.inflearn.com/course/spring-framework_core

 

스프링 프레임워크 핵심 기술 - 인프런

이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다. 초급 웹 개발 Java Spring 온라인 강의

www.inflearn.com

https://galid1.tistory.com/512?category=769011

 

Spring - @Autowired 분석!

Spring @Autowired어노테이션이란 @Autowired에 대한 분석이라기에는 얕은 지식을 가지고 @Autowired 어노테이션에 관해서 포스팅을 해보겠습니다. 1. Autowired란? @Autowired 어노테이션은 이름을 보면 알 수 있..

galid1.tistory.com

 

댓글