사용 예1
@Autowired, @Resource,@Inject은 모두 의존관계를 자동으로 연결해주는 기능을 가진 어노테이션이지만 조금씩 차이가 있다.
|
@Resource |
@Autowired |
@Inject |
설명 |
Java 에서 지원 |
Spring Framework 에서 지원하는 Dependency 정의 용도의 어노테이션 자동주입이며 종속적이다 |
Java 에서 지원 |
사용하는 위치 |
필드 , 한개의 파라미터인 빈 프로퍼티 setter 메소드 |
필드 , 생성자 , 여러개인 파라미터 메소드 |
필드 , 생성자 , 메소드 |
연결 또는 검색 방식 |
이름으로 연결 안되면 타입 |
타입으로 연결 안되면 이름 |
타입으로 연결 안되면 이름 |
특이사항 |
|
스프링프레임워크 종속 |
|
강제 연결 하기 |
@Resource(name="title") |
@Qualifier("title") |
|
@Inject와 @Resource는 JSR에 실려있는 자바 기존의 어노테이션이다. 반면 @Autowired의 경우에는 스프링에서 등장한 어노테이션이다. 따라서 스프링 이외에서는 사용 할 수 없다. 만약에 프로젝트를 스프링에서 다른 프레임워크로 바꿀 경우가 있다면 @Autowired보단 @Inject나 @Resource를 써야한다. 다만 이런 경우는 거의 없다.
연결 방식은 @Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결한다.
@Resource
name 으로 DI 를 가능케한다. 자바에서 지원하는 어노테이션 이며 프레임워크에 종속적이지 않아 많이 사용한다. 이걸 추천한다. 다 똑같지만 필요로 하는 자원을 쓰기 위해 어노테이션을 추가해 DI를 한다. Bean을 생성해주며 싱글톤 패턴이 자동으로 적용이 된다고 생각하면 된다.
@Autowired
type으로 DI 를 가능케한다. 스프링 프레임워크에서 지원 하는 어노테이션이면 프레임워크에 종속적이다. 그래서 추천하지는 않는다 왜냐하면 스프링 프레임워크를 쓰다 다른 프레임워크로 수정할 경우에 많은 리소스가 발생한다. 다 바꿔줘야한다. 이것또한 Bean를 생성하며 싱글톤 패턴이 자동으로 적용이 된다. 타입으로 연결 하기 때문에 같은 타입인 여러개의 필드는 오류가 날것이다. 강제 연결 할경우에는 네임을 붙히고 @Qualifier를 사용한다.
@Inject
name으로 DI를 가능케한다. 자바에서 지원하는 어노테이션 이며 프레임 워크에 종속적이지 않아 사용해도 좋다. 이것은 @Resource 랑 다를게 없지만 다른점이라하면 자바에서 지원하는건데 타입으로 연결한다는 점이다 @Autowired 를 사용할거라면 차라리 Inject를 사용하는 걸 추천하는 편이기는 한다. 다만 오토와이어는 확실한 의존성이 보장된다.
@Resource
private Member member;
@Autowired
private Member member;
@Inject
private Member member;
//오토와이어 강제 연결
@Autowired
@Qualifier("member1")
private Member member
Resource는 이름으로 연결 하기 때문에 member으로 연결한다는 점이다
Autowired , Inject는 타입으로 연결하기 때문에 Member 로 연결한다
이걸 생각하며 자유롭게 사용 해야한다
@Autowired private Car hi;
@Autowired private Car car;
관련 글 |
|
저의 글을 읽어 주셔서 감사합니다. 오늘도 즐거운 하루 보내세요.
저의 글이 조금이나마 도움이 되셨다면 로그인이 필요 없는 공감♥ 한번 꾸욱 눌러주세요 하하~
'프레임워크 > Spring' 카테고리의 다른 글
[ Spring ] Transaction(트랜잭션)의 모든것 (0) | 2022.03.19 |
---|---|
[ Spring ] @RestController @Controller 차이 (0) | 2022.03.17 |