@Autowired, @Resource, @Inject의 역할
세 어노테이션의 공통점은 자동 의존 주입(DI)
입니다.
@Autowired, @Resource, @Inject의 차이점
@Autowired | @Resource | @Inject | |
---|---|---|---|
지원 | Spring Framework에서 지원 | Java에서 지원 | Java에서 지원 |
연결 순서 |
1. 타입으로 연결 | 1. 이름으로 연결 | 1. 타입으로 연결 |
2. 이름으로 연결 | 2. 타입으로 연결 | 2. 이름으로 연결 | |
위치 | 필드,생성자,setter메서드O | 생성자X, 필드,setter메서드O | 필드,생성자,setter메서드,일반메서드O |
@Autowired
타입으로 자동 의존 주입을 합니다. Spring Framework에 종속적입니다.
@Qualifier
어노테이션을 사용하여 강제연결을 할 수 있습니다.
required
속성을 false
로 지정하면 주입할 의존 객체가 존재하지 않아도 예외를 발생시키지 않습니다.
@Autowired 적용순서
- 타입이 같은 Bean 객체를 검색합니다. 존재하면 해당 객체를 사용합니다. @Qualifier가 명시되어 있는 경우 @Qualifier와 같은 값을 가져야 합니다.
- 같은 타입의 Bean 객체가 두개 이상인 경우
- @Qualifier로 지정한 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.
- @Qualifier가 없는 경우 이름이 같은 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.
간단하게 표현하면 타입 > 이름 > Qualifier > fail
입니다.
@Resource
name 속성으로 자동 의존 주입을 합니다. Java에서 지원하므로 특정 프레임워크에 종속적이지 않습니다.
@Resource 사용시 name 속성을 생략하면 @Resource가 적용된 필드나 메서드의 타입을 사용합니다.
@Autowired와 마찬가지로 @Qualifier 어노테이션을 사용할 수 있습니다.
@Resource 적용순서
- name 속성에 지정한 Bean 객체를 검색합니다. 존재하면 해당 객체를 사용합니다.
- name 속성이 없을 경우 동일한 타입을 갖는 Bean 객체를 찾습니다. 존재하면 해당 객체를 사용합니다.
- name 속성이 없고 동일 타입의 Bean 객체가 두개 이상인 경우
- 같은 이름을 가진 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.
- 같은 이름의 Bean 객체가 없다면 @Qualifier를 이용해서 주입할 빈 객체를 찾습니다.
간단하게 표현하면 이름 > 타입 > Qualifier > fail
입니다.
@Inject
타입으로 자동 의존 주입을 합니다. Java에서 지원하므로 특정 프레임워크에 종속적이지 않습니다.
@Autowired와 동일하게 작동합니다. 하지만 적용 순서는 약간 다릅니다.
타입 > Qualifier > 이름 > fail
입니다.
반응형
'Spring' 카테고리의 다른 글
[Spring] AOP 구현 (XML) (0) | 2020.07.06 |
---|---|
[Spring] AOP의 개념 (0) | 2020.07.06 |
[IntelliJ] release version 5 not supported 오류 (0) | 2020.06.27 |
[Tomcat] 톰캣 로그 한글에서 영어로 바꾸는 방법 (0) | 2020.06.26 |
IntelliJ에서 SpringMVC + Maven + Tomcat (0) | 2020.06.26 |