728x90

@Resource @Autowired @Inject 의 공통점은 의존 주입 이다.

또한 특정 Bean 기능을 수행하기 위해 기능에 필요한 특정 Bean을 참조 해야 하는 경우가 많이 발생한다

그럴때 사용하는것이 @Resource @Autowired @Inject 의 어노테이션이다

그럼 이 어노테이션의 차이점과 사용법을 알아보도록 하자.

 

 

@Resource

@Autowired

@Inject

설명

Java 에서 지원하는 어노테이션

Spring Framework 에서 지원하는 Dependency 정의 용도의 어노테이션 자동주입이며 종속적이다

Java 에서 지원하는 어노테이션

사용하는 위치

필드 , 한개의 파라미터인 빈 프로퍼티 setter 메소드

필드 , 생성자 , 여러개인 파라미터 메소드

필드 , 생성자 , 메소드

연결 또는 검색 방식

이름으로 연결 안되면 타입

타입으로 연결 안되면 이름

타입으로 연결 안되면 이름

특이사항

 

스프링프레임워크 종속적이다

 

강제 연결 하기

@Resource(name="title")

@Qualifier("title")

 

 

 

간단한 설명은 이렇게 자세한 설명을 이어가겠다.

 

@Resource

name 으로 DI 를 가능케한다. 자바에서 지원하는 어노테이션 이며 프레임워크에 종속적이지 않아 많이 사용한다. 이걸 추천한다.

다 똑같지만 필요로 하는 자원을 쓰기 위해 어노테이션을 추가해 DI를 한다.

Bean을 생성해주며 싱글톤 패턴이 자동으로 적용이 된다고 생각하면 된다.

 

@Autowired

type으로 DI 를 가능케한다. 스프링 프레임워크에서 지원 하는 어노테이션이면 프레임워크에 종속적이다.

그래서 추천하지는 않는다 왜냐하면 스프링 프레임워크를 쓰다 다른 프레임워크로 수정할 경우에 많은 리소스가 발생한다

다 바꿔줘야하는 부분이... 양이 방대하다면 답이 없고

그래서 나는 Resource를 추천한다 어느 프레임워크에 종속적이지 않기 때문에

이것또한 Bean를 생성하며 싱글톤 패턴이 자동으로 적용이 된다. 타입으로 연결 하기 때문에 같은 타입인 여러개의 필드는 오류가 날것이다

강제 연결 할경우에는 @Qualifier를 사용하면 된다 네임을 붙혀서

 

@Inject

name으로 DI를 가능케한다. 자바에서 지원하는 어노테이션 이며 프레임 워크에 종속적이지 않아 사용해도 좋다

이것은 @Resource 랑 다를게 없지만 다른점이라하면 자바에서 지원하는건데 타입으로 연결한다는 점이다

Autowired 를 사용할거라면 차라리 Inject를 사용하는 걸 추천하는 편이기는 한다

다만 오토와이어는 확실한 의존성이 보장이 되기때문에 이거는 어느걸 추천한다고는 확실히 답변 못주겠다.

알아서 리소스와 코드의 맞게 써라

728x90

'프로그래밍 > java' 카테고리의 다른 글

롬복 설치  (0) 2022.05.19
SVN 락 풀기  (0) 2020.03.12
인터넷이 끊겼을 때 spring xsd 관려  (0) 2020.01.14
String, StringBuffer, StringBuilder의 장단점 및 차이점  (0) 2019.10.11
poi cell Number 포맷 문자로 읽기  (0) 2016.11.04

+ Recent posts