問題:你好,我是有關於Java EE問題定製預選賽不會對注入工作
,我必須使用註釋像@注入@Stateless etcetc,但我不能得到一個解決方案後,閱讀了大量的文檔和示例etcetc似乎我的代碼應該工作,但肯定不是。所以問題是,我有這樣的
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface BudgetsDs {
}
的界面上的自定義預選賽,我想在另一個對象注入它作爲這樣
@Dependent
public class BudgetService {
@BudgetsDs
@Inject
DataSource budgetsDS;
... some getter, setter , etcetc...
}
成員字段我已經通過這個
https://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html
和其他類似的文檔類似。 我試過用@EJB,@Stateless但它不起作用。 我認爲我目前在註釋中缺少一件大事, ,所以如果你有很好的教程,或者很好的建議,或者我想聽到他們的解釋。 我不要求一個完整的答案,但我想至少有一些線索。 歡迎任何人提供幫助。
編輯: 確切的錯誤就行
@BudgetsDs
@Inject
DataSource budgetsDS;
budgetDS扔不滿意相關性:解決方案
:無豆注射點EDIT2匹配
1)我實施了一個新的類ResourceProducer 正如約翰Ament 建議我使用@Produces和@Resource(name =「jdbc/myDataSource」), 爲我需要的每個數據源。
public class ResourceProducer {
@Produces
@BudgetsDs
@Resource(name="jdbc/BudgetsDs")
public DataSource budgetsDs;
@Produces
@OtherDs
@Resource(name="jdbc/OtherDs")
public DataSource otherDs;
...
}
2)爲每個連接
// In a file
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface BudgetsDs {
}
// In a another file
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface OtherDs {
}
3)通過這種方式,注入工作得很好,我可以注入不同的數據源,我想,這樣的不同的自定義限定:
@Dependent
public class BudgetService {
@BudgetsDs
@Inject
DataSource budgetsDS;
@OtherDs
@Inject
DataSource otherDs;
... some getter, setter , etcetc...
}
還有另外一個解決方案下面這個也適用。
感謝aribeiro和John Ament。 我的第一個關於堆棧溢出的問題,真的很好地回答了社區
你的'DataSource'的實現是否也有'@ BudgetsDs'註解? – aribeiro
不,我只是直接在我的BudgetService類中使用它, – Koraxos
爲了讓容器注入'DataSource'的正確實現,您還需要將您的限定符放在實現中。如果您注意到,在您提到的鏈接中,@ Informal限定符位於「InformalGreeting」類的開頭。然後,你可以在https://docs.oracle.com/javaee/6/tutorial/doc/gjban.html中看到,在Printer類上注入了一個問候語:'@Inject @Informal Greeting greeting;'。 – aribeiro