2017-06-29 90 views
4

我試圖讓我的周圍CDI頭,在這種情況下,註釋@Produces@Named@Produces @Named給人以WELD-001408

我有以下代碼

@RunWith(CdiRunner.class) 
public class cdiTest { 

@Inject 
protected CDIModel em; 

@Test 
public void injectionTest(){ 
    Assert.assertEquals("this", em.getMyString()); 
} 

} 

public class CDIModel { 

String myString; 

public CDIModel(String myString) { 
    this.myString = myString; 
} 

public String getMyString() { 
    return myString; 
} 
} 

public class EntityProducer { 

@Produces 
@Named("this") 
@Singleton 
public CDIModel doThis() { 
    return new CDIModel("this"); 
} 

@Produces 
@Named("that") 
@Singleton 
public CDIModel doThat() { 
    return new CDIModel("that"); 
} 

} 

爲什麼我得到

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied 
dependencies for type CDIModel with qualifiers @Named 
    at injection point [UnbackedAnnotatedField] @Inject @Named protected 
persistence.dao.cdiTest.em 
    at persistence.dao.cdiTest.em(cdiTest.java:0) 

加入@AdditionalClasses後(EntityProducer.class)我得到

org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous 
dependencies for type CDIModel with qualifiers @Default 
at injection point [UnbackedAnnotatedField] @Inject protected 
dk.nykredit.lanc.persistence.dao.cdiTest.em 
at dk.nykredit.lanc.persistence.dao.cdiTest.em(cdiTest.java:0) 
Possible dependencies: 
- Producer Method [CDIModel] with qualifiers [@Default @Named @Any] declared 
as [[BackedAnnotatedMethod] @Produces @Named @Singleton public 
persistence.dao.EntityProducer.doThat()], 
- Producer Method [CDIModel] with qualifiers [@Default @Named @Any] declared 
as [[BackedAnnotatedMethod] @Produces @Named @Singleton public 
persistence.dao.EntityProducer.doThis()] 

回答

1

CDI-Unit不掃描所有的類,因此它不知道EntityProducer類。所以你必須手動添加你想要被CDI掃描的類/包。

可以使用@AdditionalClasses註釋:

@RunWith(CdiRunner.class) 
@AdditionalClasses(EntityProducer.class) 
public class cdiTest { 
    .... 
    .... 

} 

編輯

然後你得到了一個ambigous依賴,因爲你沒有適當資格的注入。您應該使用@Named("this")@Named("that")在測試類:

@Inject 
@Named("this") // or @Named("that") 
protected CDIModel em; 

還要注意的是,在CDI我們平時使用@Qualifier代替@Named

+0

也做了,但現在我收到WELD-001409在2產生方法。我編輯了初始文本以顯示錯誤 – stuf99

+0

我編輯了我的答案 – Rouliboy

+0

太好了,解決了它,Thx :-) – stuf99