Home [Spring] @Autowired,@Resource,@Inject
Post
Cancel

[Spring] @Autowired,@Resource,@Inject

  • 모두 DI(의존성 주입) 을 위해 사용한다.

  • 특정 Bean 기능을 수행하기 위해 기능에 필요한 특정한 Bean을 참조해야 하는데 이 때 특정 Bean에 자동 연결을 위해 위 어노테이션들을 사용한다.

@Autowired

  • 스프링 프레임워크에서 제공하는 어노테이션이기 때문에 타 프레임워크에서는 사용할 수 없다.
  • 속성, Setter, 생성자에 모두 사용 가능하며 주입하려는 객체 타입이 일치하는 객체를 자동으로 주입
  • 기본적으로 특정 빈을 찾지 못하면 예외를 던진다. 이 때 required 속성값을 false로 지정할 경우에는 빈 객체가 존재하지 않더라도 예외처리를 발생시키지 않는다.
    • @Qualifier
      • 동일한 타입의 빈 객체가 여러개 정의되어 있을 경우 XML 설정파일에서 우선적으로 사용할 빈 객체의 태그 하위에 태그를 설정한다.
      • @Autowired와 함께 @Qualifier를 사용하여 XML 설정 파일에서 설정한 태그의 value 값을 지정해준다. 이렇게 하면 동일한 타입의 빈이 여러 개일 경우 우선적으로 특정 빈이 주입된다.

@Resource

  • 자바에서 지원하는 어노테이션이기 때문에 프레임워크에 비종속적이다.

  • 속성, Setter에서 사용 가능하며 주입하려는 객체 이름이 일치하는 객체를 자동으로 주입, 생성자는 사용할 수 없다.
  • Resource를 통해 자동 주입을 하려면 주입하려는 Class에서 Bean의 id 이름과 동일해야 한다.

@Inject

  • 자바에서 지원하는 어노테이션이기 때문에 프레임워크에 비종속적이다.
  • @Inject를 사용하기 위해서는 maven이나 gradle에 javax 라이브러리 의존성을 추가해야한다.
  • 속성, Setter, 생성자에 모두 사용 가능하며 주입하려는 객체 타입이 일치하는 객체를 자동으로 주입
  • @Autowired와 비슷하지만 Qualifier 대신 명시적으로 Bean을 표기한다.
    • @Named
      • @Autowired의 @Qualifier와 유사하지만 @Named에는 빈 이름(id)를 지정하므로 @Qualifier를 사용할 때에 비해 XML 설정 파일이 다소 짧아진다는 특징이 있다.
      • XML 설정 파일에 추가적으로 설정할 것이 없으며 @Inject와 함께 @Named를 사용하여 빈 이름을 지정해야한다.
This post is licensed under CC BY 4.0 by the author.