복붙노트

[SPRING] Spring Framework에서 @Inject와 @Autowired의 차이점은 무엇입니까? 어떤 조건에서 사용할 것인가?

SPRING

Spring Framework에서 @Inject와 @Autowired의 차이점은 무엇입니까? 어떤 조건에서 사용할 것인가?

SpringSource의 블로그를 통해 가고 블로그의 저자 중 한 명이 @Inject를 사용하고 있으며 @Autowired도 사용할 수 있다고 가정합니다.

다음은 코드 조각입니다.

@Inject private CustomerOrderService customerOrderService;

@Inject와 @Autowired의 차이점에 대해 확신하지 못하고 누군가가 자신의 차이점을 설명하고 어떤 상황에서 어떤 것을 사용해야하는지 고맙게 생각합니다.

해결법

  1. ==============================

    1.여기서는 javax.inject.Inject 주석을 참조한다고 가정합니다. @Inject는 Java EE 6 (JSR-299)에서 소개 된 Java CDI (Contexts and Dependency Injection) 표준의 일부입니다. Spring은 @Inutowired 어노테이션과 @Inject를 동의어로 사용하도록 지원하기로 결정했다.

    여기서는 javax.inject.Inject 주석을 참조한다고 가정합니다. @Inject는 Java EE 6 (JSR-299)에서 소개 된 Java CDI (Contexts and Dependency Injection) 표준의 일부입니다. Spring은 @Inutowired 어노테이션과 @Inject를 동의어로 사용하도록 지원하기로 결정했다.

    그래서 여러분의 질문에 답하기 위해 @Autowired는 Spring 자체의 (기존) 주석입니다. @Inject는 Spring과 유사한 의존성 주입 표준을 정의하는 CDI라는 새로운 Java 기술의 일부입니다. Spring 애플리케이션에서 두 가지 주석은 Spring이 자체 JSR-299 주석을 지원하기로 결정한 것과 같은 방식으로 작동합니다.

  2. ==============================

    2.다음은 @Resource, @Inject 및 @Autowired를 비교하는 블로그 게시물이며 매우 포괄적 인 작업을 수행하는 것으로 보입니다.

    다음은 @Resource, @Inject 및 @Autowired를 비교하는 블로그 게시물이며 매우 포괄적 인 작업을 수행하는 것으로 보입니다.

    링크에서 :

    작성자가 참조하는 테스트 2와 7은 '필드 이름 별 주입'과 '잘못된 한정자를 사용하여 빈을 분석하려는 시도'입니다.

    결론은 필요한 모든 정보를 제공해야합니다.

  3. ==============================

    3.배선이없는 상황을 처리하기 위해 @Autowired required 속성을 false로 설정하여 빈을 사용할 수 있습니다.

    배선이없는 상황을 처리하기 위해 @Autowired required 속성을 false로 설정하여 빈을 사용할 수 있습니다.

    그러나 @Inject를 사용할 때 Provider 인터페이스는 빈과 함께 작동합니다. 즉, 빈이 직접 주입되지 않고 공급자와 함께 주입됨을 의미합니다.

  4. ==============================

    4.Spring 3.0부터, Spring은 JSR-330 의존성 주입 주석 (@Inject, @Named, @Singleton)을 지원한다.

    Spring 3.0부터, Spring은 JSR-330 의존성 주입 주석 (@Inject, @Named, @Singleton)을 지원한다.

    Spring 문서에는 스프링 관련 항목과의 비교를 포함하여 별도의 섹션이 있습니다.

  5. ==============================

    5.@Autowired와 @Inject 사이의 중요한 차이점은 @Autowired가 'required'속성을 가지고있는 반면 @Autowired는 'required'속성을 가지고 있다는 것입니다.

    @Autowired와 @Inject 사이의 중요한 차이점은 @Autowired가 'required'속성을 가지고있는 반면 @Autowired는 'required'속성을 가지고 있다는 것입니다.

  6. ==============================

    6.@Autowired annotation은 Spring 프레임 워크에서 정의된다.

    @Autowired annotation은 Spring 프레임 워크에서 정의된다.

    @Inject 어노테이션은 표준 "Java 용 종속성 주입"(JSR-330)에 정의 된 표준 어노테이션입니다. 스프링 (버전 3.0 이후)은 표준 JSR-330에 정의 된 의존성 삽입의 일반화 된 모델을 지원합니다. (Google Guice 프레임 워크와 Picocontainer 프레임 워크도이 모델을 지원합니다.)

    @Inject를 사용하면 지연된 참조를 삽입 할 수있는 Provider 인터페이스 구현에 대한 참조를 삽입 할 수 있습니다.

    어노테이션 @Inject와 @ Autowired-는 거의 완벽한 유사점입니다. @Autowired 주석뿐만 아니라 @Inject 주석은 자동 바인딩 속성, 메서드 및 생성자에 사용할 수 있습니다.

    @Autowired 주석과 달리 @Inject 주석에는 필수 속성이 없습니다. 따라서 종속성을 찾을 수없는 경우 예외가 발생합니다.

    바인딩 속성의 설명에는 차이점이 있습니다. 주입을 위해 구성 요소를 선택하는 데 애매한 점이 있으면 @Named 한정자를 추가해야합니다. @Autowired와 유사한 상황에서 @Qualifier 한정자가 추가됩니다 (JSR-330은 @Qualifier 주석을 정의하고 @Named가 정의 된이 한정자 주석을 통해 정의합니다).

  7. ==============================

    7.@Inject에는 '필수'속성이 없습니다.

    @Inject에는 '필수'속성이 없습니다.

  8. ==============================

    8.항상 @ 주사를 잘 사용하십시오. 왜냐하면 우리의 응용 프로그램을 프레임 워크에 대해 불가지론스럽게 만드는 java 설정 접근법 (태양에 의해 제공됨)이기 때문입니다. 그래서 봄에 수업을들을 수 있습니다.

    항상 @ 주사를 잘 사용하십시오. 왜냐하면 우리의 응용 프로그램을 프레임 워크에 대해 불가지론스럽게 만드는 java 설정 접근법 (태양에 의해 제공됨)이기 때문입니다. 그래서 봄에 수업을들을 수 있습니다.

    @Autowired를 사용하면 @Autowired가 스프링 제공 주석이기 때문에 봄에만 작동합니다.

  9. ==============================

    9.위의 내용 외에도 :

    위의 내용 외에도 :

  10. ==============================

    10.@Inject 어노테이션은 JSR-330 어노테이션 모음 중 하나입니다. 이것은 Match by Type, Match by Qualifier, Match by Name 실행 경로를 가지고 있습니다. 이러한 실행 경로는 setter 및 필드 주입 모두에 유효합니다. @Autowired 주석의 동작은 @Inject 주석과 동일합니다. 유일한 차이점은 @Autowired annotation이 Spring 프레임 워크의 일부라는 점이다. @Autowired 주석은 위의 실행 경로도 가지고 있습니다. 그래서 나는 @Autowired를 당신의 대답으로 추천한다.

    @Inject 어노테이션은 JSR-330 어노테이션 모음 중 하나입니다. 이것은 Match by Type, Match by Qualifier, Match by Name 실행 경로를 가지고 있습니다. 이러한 실행 경로는 setter 및 필드 주입 모두에 유효합니다. @Autowired 주석의 동작은 @Inject 주석과 동일합니다. 유일한 차이점은 @Autowired annotation이 Spring 프레임 워크의 일부라는 점이다. @Autowired 주석은 위의 실행 경로도 가지고 있습니다. 그래서 나는 @Autowired를 당신의 대답으로 추천한다.

  11. from https://stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework-which by cc-by-sa and MIT license