2011-03-24 3 views
81

javax.inject 패키지를 이해하려고하는데 어떤 javax.inject.Named 주석을 사용해야하는지 명확하지 않습니다. Javadoc은 그 배경을 설명하지 않습니다. 나는 빈 공장하지만 Javadoc의 설명에 추가 보인다 빈에 @Named을 넣어, 일부 샘플 프로그램을 작성하는 봄 3.0 사용하고 http://download.oracle.com/javaee/6/api/javax/inject/Named.htmljavax.inject.Named annotation은 무엇으로 사용되어야합니까?

에서

자바 독은 '내가 할 수있는 그래서 빛 그것이 표준 행동인지 또는 Spring 특정 행동인지 알려준다.

내 질문은 :

  1. 당신은 클래스가에 대한 주석 무엇이 다른 클래스에 주사해야한다 런타임 시스템을 말해야되는 방법 @Named
  2. @Qualifier의 차이점은 무엇입니까? Spring에서 @Component과 같은 기능을합니까?

업데이트 1@Named@Qualifierhttp://java.dzone.com/articles/java-ee6-cdi-named-components 덕분에 아래에에 코멘트를 연결하기위한 @xmedeko 멋진 기사에서 훌륭한 @Named의 설명과 @Qualifier있다.

+0

JSR-330의 구성은 사양 (즉, 컨테이너마다 다릅니다. –

+1

JSR 330의 @Named 주석은 컴포넌트를 감지하고 이름을 제공하는 수단으로 사용할 수 있습니다.이 동작은 클래스 경로에 JSR 330 JAR이 있으면 자동으로 활성화됩니다. " 이 동작은 봄이나 @Named를 이해하는 모든 컨테이너에 고유 한 것입니까? – ams

답변

54

동일한 범위에 바인딩 된 동일한 유형의 서로 다른 개체를 구별하기 위해 @Named를 사용하십시오.

@Named("maxWaitTime") 
public long maxWaitTimeMs; 

@Named("minWaitTime") 
public long minWaitTimeMs; 

@Named 규정하지 않고, 인젝터는 변수에 바인딩 오래 알고하지 않을 것입니다.

@Named와 같은 기능을하는 주석을 만들려면 @Qualifier 주석을 만들 때 사용하십시오. @Named를 보면 @Qualifier로 주석을 달았습니다. JSR-330 규격에 따라 # 2에 관해서

+0

그래서 @Named는 @Qualifier입니다. 그렇다면 왜 @Qualifier가 그렇게 일반적 일 필요가 있습니다. @ Repository, @ Service, @ Controller와 같은 스테레오 타입을 javax.inject를 사용하여 @Qualifier로 정의 할 수 있도록 허용하는 아이디어가 있습니까? – ams

+0

스테레오 타입에 대해 무슨 뜻인지 모르겠습니다. 같은 유형의 다른 인스턴스를 구별하기 위해 새로운 주석을 추가한다는 의미라면 그렇다. – sbridges

+0

예를 들어 @Named ("maxWaitTime") 대신 @MaxWaitTime을 사용할 수 있습니다. 그것은 단지 조금 더 깨끗합니다. – sourcedelica

7

:

이 패키지 휴대용 클래스를 사용 의존성 주입 주석을 제공하지만 인젝터 구현 을 외부 의존성 구성을 남긴다.

따라서 어떤 개체를 주입 할 수 있는지를 결정하는 것은 공급자의 몫입니다. 봄의 경우 모든 봄 콩입니다. AnnotationConfigApplicationContext를 사용할 때 JSR-330 주석으로 주석 된 클래스는 Spring bean으로 자동 추가됩니다.

31

빈을 삽입하기 위해 @Autowired 대신 @Inject를 사용하십시오.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 있습니다.
그 JSR-330 표준 주석 (한 다음 항아리 클래스 경로에서와 같이)

+0

"빈 삽입"이라는 문구는 모호합니다. "그 콩의 모든 의존성을 만족 시키라"는 뜻입니까, 아니면 "그 콩을 의존성이있는 것으로 밀어 넣다"는 뜻입니까? –

+0

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

+0

bean을 삽입 - "bean을 의존성이있는 것으로 주입" –

2

@Named 주석의 주요 역할은 목적을 위해 빈을 정의하는 것입니다 스캔 봄 주석과 같은 방법으로 검색됩니다 일반적으로 JSF EL 해석자를 통해 응용 프로그램 내의 EL 문을 해석합니다.주입은 이름을 사용하여 수행 할 수 있었지만, CDI가 주입 지점과 주입 될 콩을 표현하는 훨씬 더 풍부한 방법을 제공하기 때문에 CDI 주입이 어떻게 작동하는지 의미가 없습니다.

관련 문제