본문 바로가기

Spring

Spring @Resouce, @Autowired, @Inject 의존 관계 주입 차이점

728x90
반응형
  • @Resource, @Autowired, @Inject 모두 의존 관계를 자동으로 연결해주는 기능을 가진 어노테이션이다 

 

@Resource

  • JSR에 실려있는 자바 기존 어노테이션 
  • Name -> Type -> Qualifier 기준으로 찾음 
  • 사용 위치 : 멤버변수, setter메서드
  • Name으로 DI가 가능하고 프레임워크 종속적이지 않기 때문에 추천 
  • 싱글턴 

 

@Autowired

  • Spring에서 지원하는 어노테이션 
  • Type -> Name -> Qualifier
  • 사용 위치 : 멤버 변수 , Setter메서드, 생성자, 일반 메서드 
  • 타입으로 연결하기 때문에 같은 타입 여러개의 필드는 오류가 남 
  • 강제 연결시 @Qualifier사용 

 

@Inject

  • JAVA에서 지원하는 어노테이션, 프레임워크 종속적이지 않음
  • Type -> Qualifier -> 이름
  • @Autowired와 동작 방식이 같지만 찾는 순서가 다름 
  • 사용 위치 : 멤버 변수, Setter메서드, 생성자, 일반 메서드 

 

@Qualifier

  • Type이 동일한 Bean객체가 여러개 있으면 Spring Exception이 발생(@Autowired)
  • @Autowired가 적용된 필드나 설정 메서드 property이름과 같은 이름을 가진 빈객체가 있을 경우 이름이 같은 빈 객체를 주입 받는다.

 

@Getter
@Setter
@Component("userInfo")
public class UserInfo {

    private String userName;
    private int age;

}
@RestController
public class DiController {

    @Resource
    private UserInfo userInfo;

    @GetMapping("/setUser")
    public String setUser(HttpServletRequest request) {
        userInfo.setAge(10);
        userInfo.setUserName("hi");

        return "userInfo";
    }
}

 

728x90
반응형