javax.inject.Named 주석은 무엇을 위해 사용됩니까?


114

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 특정 동작인지 알 수 없습니다.

내 질문은 다음과 같습니다.

  1. @Named과 의 차이점은 무엇입니까@Qualifier
  2. 런타임 시스템에 클래스가 다른 클래스에 주입 가능해야한다는 것을 어떻게 알려 주어야합니까? @ComponentSpring 과 동등 합니까?

1 업데이트 가의 훌륭한 설명이 @Named@Qualifier에 대한 좋은 기사에서 @Named@Qualifier https://dzone.com/articles/java-ee6-cdi-named-components을 감사 주석 아래에에 연결을위한 @xmedeko.


JSR-330의 구성은 사양을 벗어났습니다. 즉, 컨테이너별로 다릅니다.
Thorbjørn Ravn Andersen 2011

1
Spring 문서에 따르면 "JSR 330의 @Named 주석은 컴포넌트를 감지하고 이름을 제공하는 수단으로 사용할 수 있습니다.이 동작은 클래스 경로에 JSR 330 JAR이있는 경우 자동으로 활성화됩니다." 이 동작은 spring 또는 @Named를 이해하는 모든 컨테이너에 고유합니까?
ams

답변:


87

동일한 범위에 바인딩 된 동일한 유형의 다른 개체 @Named구별하는 데 사용 합니다 .

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

@Named한정자가 없으면 인젝터는 어느 길이를 어떤 변수에 바인딩할지 알 수 없습니다.

  • 와 같이 작동하는 주석을 만들려면 주석을 만들 때 @Named사용하십시오 @Qualifier.

  • 당신이 보면 @Named, 그 자체가 주석입니다 @Qualifier.


따라서 @Named는 실제로 @Qualifier이므로 @Qualifier가 그렇게 일반적이어야하는 이유는 javax.inject를 사용하는 사람이 @Qualifier로 표시된 @ Repository, @ Service, @ Controller와 같은 스테레오 타입을 정의 할 수 있도록 허용하는 아이디어입니까?
ams

고정 관념에 대해 무슨 뜻인지 잘 모르겠습니다. 동일한 유형의 다른 인스턴스를 구별하기 위해 새 주석을 추가하는 것을 의미하는 경우 예입니다.
sbridges 2011 년

예를 들어 @Named ( "maxWaitTime") 대신 @MaxWaitTime을 사용할 수 있습니다. 조금 더 깨끗합니다.
sourcedelica 2011 년

28
에 대한 좋은 기사 @Named@Qualifier java.dzone.com/articles/java-ee6-cdi-named-components
xmedeko

이해가 안 돼요 ... 변수 이름에 따라 차이를 구분할 수 없나요?
CodyBugstein

64

@InjectSpring 대신 @Autowiredbean을 주입합니다.
@NamedSpring 대신 @Componentbean을 선언합니다.

이러한 JSR-330 표준 주석은 Spring 주석과 동일한 방식으로 스캔되고 검색됩니다 (다음 jar이 클래스 경로에있는 한).


"inject a bean"이라는 문구는 모호합니다. 당신은 "그 빈의 모든 의존성을 만족시킨다"는 의미입니까, 아니면 "그 빈을 의존성으로 가지고있는 것에 주입"을 의미합니까?
Andrew Swan

스프링 주석에 대응하는 JSR 목록은 어디에서 찾을 수 있습니까?
Pawan 2017 년

빈 주입- "그 빈을 의존성있는 무언가에 주입"
Nadav Finish

나는 "나는 JSR의 목록에 익숙하지 않은 해요, 미안 Pawan을 해요 그 봄 주석에 대응
Nadav 마침

8

# 2와 관련하여 JSR-330 사양에 따르면 :

이 패키지는 이식 가능한 클래스를 활성화하는 종속성 주입 주석을 제공하지만 외부 종속성 구성은 인젝터 구현까지 남겨 둡니다.

따라서 주입에 사용할 수있는 개체를 결정하는 것은 공급자에게 달려 있습니다. Spring의 경우 모든 Spring Bean입니다. AnnotationConfigApplicationContext를 사용할 때 JSR-330 주석으로 주석이 달린 모든 클래스는 자동으로 Spring Bean으로 추가됩니다.


5

@Named 어노테이션의 주요 역할은 일반적으로 JSF EL 해석기를 통해 애플리케이션 내에서 EL 문을 해석 할 목적으로 빈을 정의하는 것입니다. 주입은 이름을 사용하여 수행 할 수 있지만 CDI에서 주입 지점과 주입 할 빈을 훨씬 더 풍부한 방법으로 표현할 수 있기 때문에 CDI에서 주입이 작동하는 방식은 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.