@Autowired
@Autowired 어노테이션을 상요하면 IoC 컨네티어 안에 존재하는 빈을 자동으로 찾아 주입시켜준다.(타입기준)
required : 기본값은 true (true 인경우 못찾으면 어플리케이션 구동 실패)
사용가능 위치
- 생성자(스프링 4.3부터는 생략가능)
- 세터
- 필드
- 파라미터
- 어노테이션 타입
@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리스트를 주입해줌
동작원리
- 새로 만든 빈 인스턴스를 수정할 수 있는 라이프 사이클 인터페이스
AutowiredAnnotationBeanPostProcessor extends BeanPostProcessor
- 스프링이 제공하는 @Autowired와 @Value 어노테이션 그리고 JSR-330의 @Inject 어노테이션을 지원하는 어노테이션 처리기
참고자료
https://www.inflearn.com/course/spring-framework_core
https://galid1.tistory.com/512?category=769011
'프로그래밍 > SPRING' 카테고리의 다른 글
[스프링기본 : IoC 컨테이너] Environment - Profile (0) | 2019.10.10 |
---|---|
[스프링 기본 : IoC 컨테이너]빈 스코프 (0) | 2019.10.06 |
[스프링 기본 : IoC 컨테이너] @Component 와 컴포넌트 스캔 (0) | 2019.10.06 |
[스프링 기본 : IoC 컨테이너] Application Context와 빈 설정 방법 (0) | 2019.10.06 |
[스프링 기본 : IoC 컨테이너 ] IoC 컨테이너 와 빈 (0) | 2019.10.06 |
댓글