-
Spring @Autowired, @Resource, @Inject의 어노테이션 차이Spring 2020. 7. 2. 14:12반응형
@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;
출처 https://itjava.tistory.com/54
반응형'Spring' 카테고리의 다른 글
Spring 스프링 pom.xml 오류해결 cvc-elt.1.a: Cannot find the declaration of element 'project' (4) 2022.02.12 Spring REST API 정의와 설계 규칙 (0) 2020.08.31 STS툴에서 MVC프로젝트(Spring Legacy Project) 생성하기 (0) 2020.06.24 Spring으로 배치 만들기 (quartz, scheduler,task) (0) 2020.06.07 스프링 Spring + 웹소켓 WebSocket 채팅 초간단 구현 (12) 2020.05.26