SpringSource에서 일부 블로그를 살펴보고 블로그 중 하나에서 저자가 사용 @Inject
중이며 그가 사용할 수도 있다고 가정합니다 @Autowired
.
다음은 코드 조각입니다.
@Inject private CustomerOrderService customerOrderService;
나는 사이의 차이에 대해하지 확신 @Inject
하고 @Autowired
누군가가 자신의 차이를 설명하면 감사하겠습니다 어느 하나가 어떤 상황에서 사용할 수 있나요?
답변
여기서는 javax.inject.Inject
주석을 참조한다고 가정합니다 . @Inject
자바 CDI (의 일부 컨텍스트 및 의존성 주입 표준 Java EE 6에 도입) (JSR-299), 더 읽기 . Spring은 @Inject
자체 @Autowired
주석 과 동의어 사용을 지원하기로 선택했습니다 .
따라서 귀하의 질문에 대답하기 위해 @Autowired
Spring 자체 주석이 있습니다. @Inject
Spring과 유사한 종속성 주입 표준을 정의하는 CDI라는 새로운 Java 기술의 일부입니다. Spring 애플리케이션에서 두 개의 주석은 Spring이 일부 JSR-299 주석을 자체적으로 지원하기로 결정한 것과 동일한 방식으로 작동합니다.
답변
여기입니다 블로그 포스트 비교 @Resource
, @Inject
그리고 @Autowired
, 그리고 꽤 포괄적 인 일을 할 것으로 보인다는.
링크에서 :
테스트 2와 7을 제외하고 구성과 결과는 동일했습니다. 후드를 살펴 보았을 때 ‘@Autowired’와 ‘@Inject’주석이 동일하게 작동한다고 결정했습니다. 이 두 주석 모두 ‘AutowiredAnnotationBeanPostProcessor’를 사용하여 종속성을 주입합니다. ‘@Autowired’와 ‘@Inject’는 스프링 빈을 주입하기 위해 서로 바꿔 사용할 수 있습니다. 그러나 ‘@Resource’주석은 ‘CommonAnnotationBeanPostProcessor’를 사용하여 종속성을 주입합니다. 비록 다른 포스트 프로세서 클래스를 사용하더라도 모두 거의 동일하게 동작합니다. 아래는 실행 경로를 요약 한 것입니다.
저자가 언급 한 테스트 2와 7은 각각 ‘필드 이름으로 주입’과 ‘나쁜 한정자를 사용하여 빈을 해결하려는 시도’입니다.
결론은 필요한 모든 정보를 제공해야합니다.
답변
배선이없는 상황을 처리하기 위해 @Autowired
required
속성을로 설정하여 Bean을 사용할 수 있습니다 false
.
그러나를 사용할 때 @Inject
Provider 인터페이스는 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
정의 하고이 한정자를 통해 정의됩니다).