[Spring] @Resource & @Qualifier

SoonMin·2021년 4월 14일
0

🚀 공통점

Resource와 Qualifier둘다 의존 자동 주입을 위한 애노테이션이다.

그리고 Bean의 이름을 검색하여 의존성 주입을 한다는 공통성이 있다.

🚀 Resource를 통한 의존 자동 주입

@Configuration
public class Config{
	@Bean("loginUserDTO")
	public UserDTO loginUserDTO() {
		return new UserDTO();
	}
}
------------------------------------------------------------------------------

@Resource(name = "loginUserDTO")
private UserDTO loginUserDTO;

-------------------------------------------

private UserDTO loginUserDTO;

@Resource(name = "loginUserDTO")
puglic void setLoginUserDTO(UserDTO loginUserDTO){
		this.loginUserDTO = loginUserDTO;
}

필드, 입력 파라미터가 한 개인 빈 프로퍼티 setter 메서드에 적용가능

🚀 Qualifier를 통한 의존 자동 주입

@Configuration
public class Config{
	@Bean("loginUserDTO")
	public UserDTO loginUserDTO(){
			return new UserDTO();
	}
}

------------------------------------------------------------------------------

@Autowired
@Qualifier("loginUserDTO")
private UserDTO loginUserDTO;

----------------------------------------------------

private UserDTO loginUserDTO;

@Autowired
@Qualifier(name = "loginUserDTO")
puglic void setLoginUserDTO(UserDTO loginUserDTO){
		this.loginUserDTO = loginUserDTO;
}

----------------------------------------------------

private UserDTO loginUserDTO;

@Autowired
@Qualifier(name = "loginUserDTO")
public 클래스이름(UserDTO loginUserDTO){
	this.loginUserDTO = loginUserDTO;
}

필드, 입력 파라미터가 한 개인 빈 프로퍼티 setter 메서드에 적용가능, 생성자에도 적용 가능!!

🚀 차이점

차이점은 @Autowired와 @Qualifier는 스프링 지원이고 @Resource는 표준 자바 지원 (JSR-250에서)이라는 것이다. 게다가 @Resource는 필드와 세터 주입 만 지원하고 @Autowired는 필드, 세터, 생성자 및 다중 인자 메서드 주입을 지원한다.

필드 및 setter 주입에 @Resource를 사용하고, 생성자 또는 다중 인자 메서드 삽입을 위해 @Qualifier 및 @Autowired를 사용하는 것이 바람직하다.

🚀 마지막으로..

스프링 부트가 나온 이후 Autowired가 잘 쓰인다고 들었다.

필드와 setter 메서드에 autowired로 자동 주입을 하는 것보다 생성자에 autowired를 해주는 것이 더 좋은 방법이므로 @Resource의 사용을 지양해야 할거 같다는 생각을 한다.

대신 Qualifier와 Autowired는 스프링에서 제공하는 annotation이기 때문에 다른 framework를 쓰는 경우 더 이상 사용할 수 없다는 단점이 있다.

0개의 댓글