[java] Spring Framework에서 @Inject와 @Autowired의 차이점은 무엇입니까? 어떤 조건에서 어떤 것을 사용해야합니까?

SpringSource에서 일부 블로그를 살펴보고 블로그 중 하나에서 저자가 사용 @Inject중이며 그가 사용할 수도 있다고 가정합니다 @Autowired.

다음은 코드 조각입니다.

@Inject private CustomerOrderService customerOrderService;

나는 사이의 차이에 대해하지 확신 @Inject하고 @Autowired누군가가 자신의 차이를 설명하면 감사하겠습니다 어느 하나가 어떤 상황에서 사용할 수 있나요?



답변

여기서는 javax.inject.Inject주석을 참조한다고 가정합니다 . @Inject자바 CDI (의 일부 컨텍스트 및 의존성 주입 표준 Java EE 6에 도입) (JSR-299), 더 읽기 . Spring은 @Inject자체 @Autowired주석 과 동의어 사용을 지원하기로 선택했습니다 .

따라서 귀하의 질문에 대답하기 위해 @AutowiredSpring 자체 주석이 있습니다. @InjectSpring과 유사한 종속성 주입 표준을 정의하는 CDI라는 새로운 Java 기술의 일부입니다. Spring 애플리케이션에서 두 개의 주석은 Spring이 일부 JSR-299 주석을 자체적으로 지원하기로 결정한 것과 동일한 방식으로 작동합니다.


답변

여기입니다 블로그 포스트 비교 @Resource, @Inject그리고 @Autowired, 그리고 꽤 포괄적 인 일을 할 것으로 보인다는.

링크에서 :

테스트 2와 7을 제외하고 구성과 결과는 동일했습니다. 후드를 살펴 보았을 때 ‘@Autowired’와 ‘@Inject’주석이 동일하게 작동한다고 결정했습니다. 이 두 주석 모두 ‘AutowiredAnnotationBeanPostProcessor’를 사용하여 종속성을 주입합니다. ‘@Autowired’와 ‘@Inject’는 스프링 빈을 주입하기 위해 서로 바꿔 사용할 수 있습니다. 그러나 ‘@Resource’주석은 ‘CommonAnnotationBeanPostProcessor’를 사용하여 종속성을 주입합니다. 비록 다른 포스트 프로세서 클래스를 사용하더라도 모두 거의 동일하게 동작합니다. 아래는 실행 경로를 요약 한 것입니다.

저자가 언급 한 테스트 2와 7은 각각 ‘필드 이름으로 주입’과 ‘나쁜 한정자를 사용하여 빈을 해결하려는 시도’입니다.

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


답변

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

그러나를 사용할 때 @InjectProvider 인터페이스는 Bean과 함께 작동하므로 Bean이 직접 주입되지 않고 Provider로 주입됩니다.


답변

스프링 3.0으로 봄 이벤트 JSR-330 의존성 주입 주석 지원 ( @Inject, @Named, @Singleton).

Spring 문서 에는 Spring과 동등한 것을 비교하는 것을 포함 하여 Spring 문서 에 대한 별도의 섹션 이 있습니다 .


답변

합니다 (읽을 때주의 주요 차이점 봄 문서를 사이) @Autowired@Inject그이다, @Autowired@Inject가 어떤 속성을 ‘요구’한 반면 ‘필요’속성이 없습니다.


답변

@Inject를 항상 더 잘 사용하십시오. Java에서 제공하는 썬 구성 방식이므로 응용 프로그램을 프레임 워크에 무관하게 만듭니다. 따라서 봄이되면 수업도 효과가 있습니다.

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


답변

@Autowired 주석은 Spring 프레임 워크에서 정의됩니다.

@Inject주석은 표준 주석이며 표준 “Dependency Injection for Java”(JSR-330)에 정의되어 있습니다. Spring (버전 3.0부터)은 표준 JSR-330에 정의 된 일반화 된 의존성 주입 모델을 지원합니다. ( Google Guice 프레임 워크Picocontainer 프레임 워크 도이 모델을 지원합니다).

with 인터페이스 @Inject의 구현에 대한 참조를 주입 할 수 있으며 Provider이로 인해 지연된 참조를 주입 할 수 있습니다.

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

@Autowired주석 과 달리 @Inject주석에는 required속성 이 없습니다 . 따라서 종속성을 찾지 못하면 예외가 발생합니다.

결합 특성의 설명에 차이가 있습니다. 주입을위한 구성 요소 선택에 모호성이있는 경우 @Named규정 자를 추가해야합니다. @Autowired주석 과 유사한 상황에서 @Qualifier한정자 가 추가됩니다 (JSR-330은 고유 한 @Qualifier주석을 @Named정의 하고이 한정자를 통해 정의됩니다).


댓글 달기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다