javax.inject
패키지 를 이해하려고하는데 javax.inject.Named
주석이 무엇에 사용되어야 하는지 명확하지 않습니다 . Javadoc은 그 뒤에 숨은 아이디어를 설명하지 않습니다.
Javadoc은 http://download.oracle.com/javaee/6/api/javax/inject/Named.html에 있습니다.
저는 Spring 3.0 을 사용하여 샘플 프로그램을 작성하고 있습니다 @Named
. Bean 을 넣어서 Bean Factory에 추가하는 것처럼 보이지만 Javadoc 설명이 너무 가벼워 표준 동작인지 Spring 특정 동작인지 알 수 없습니다.
내 질문은 다음과 같습니다.
@Named
과 의 차이점은 무엇입니까@Qualifier
- 런타임 시스템에 클래스가 다른 클래스에 주입 가능해야한다는 것을 어떻게 알려 주어야합니까?
@Component
Spring 과 동등 합니까?
1 업데이트 가의 훌륭한 설명이 @Named
과 @Qualifier
에 대한 좋은 기사에서 @Named
와 @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components을 감사 주석 아래에에 연결을위한 @xmedeko.
답변
동일한 범위에 바인딩 된 동일한 유형의 다른 개체 @Named
를 구별하는 데 사용 합니다 .
@Named("maxWaitTime")
public long maxWaitTimeMs;
@Named("minWaitTime")
public long minWaitTimeMs;
@Named
한정자가 없으면 인젝터는 어느 길이를 어떤 변수에 바인딩할지 알 수 없습니다.
-
와 같이 작동하는 주석을 만들려면 주석을 만들 때
@Named
사용하십시오@Qualifier
. -
당신이 보면
@Named
, 그 자체가 주석입니다@Qualifier
.
답변
@Inject
Spring 대신 @Autowired
bean을 주입합니다.
@Named
Spring 대신 @Component
bean을 선언합니다.
이러한 JSR-330 표준 주석은 Spring 주석과 동일한 방식으로 스캔되고 검색됩니다 (다음 jar
이 클래스 경로에있는 한).
답변
# 2와 관련하여 JSR-330 사양에 따르면 :
이 패키지는 이식 가능한 클래스를 활성화하는 종속성 주입 주석을 제공하지만 외부 종속성 구성은 인젝터 구현까지 남겨 둡니다.
따라서 주입에 사용할 수있는 개체를 결정하는 것은 공급자에게 달려 있습니다. Spring의 경우 모든 Spring Bean입니다. AnnotationConfigApplicationContext를 사용할 때 JSR-330 주석으로 주석이 달린 모든 클래스는 자동으로 Spring Bean으로 추가됩니다.
답변
@Named 어노테이션의 주요 역할은 일반적으로 JSF EL 해석기를 통해 애플리케이션 내에서 EL 문을 해석 할 목적으로 빈을 정의하는 것입니다. 주입은 이름을 사용하여 수행 할 수 있지만 CDI에서 주입 지점과 주입 할 빈을 훨씬 더 풍부한 방법으로 표현할 수 있기 때문에 CDI에서 주입이 작동하는 방식은 아닙니다.