ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    반응형

    댓글

Designed by Tistory.