我有一个JSF2 bean用作我的视图的控制器:
@Named
@SessionScoped
public class PosController implements Serializable {
@EJB FatturaFacade fatturaFacade;
// ...
}
正如您所看到的,我已经可以在其中注入我的一个EJB(用作dao包装器),但是注入“简单”对象的方式是什么?如果我有如下不同的实现怎么办?
interface Retriever;
class WebServiceRetriever implements Retriever;
class FileRetriever implements Retriever;
我看到@interface
注释,但我不太了解它。
答案 0 :(得分:3)
假设您拥有完整的Java EE 6平台,最好的方法是使用CDI的@Inject
。
最简单的机制是使用具体类型:
public class Bean {
@Inject
private WebServiceRetriever webServiceRetriever;
@Inject
private FilesRetriever filesRetriever;
//etc.
对于同一界面的多个实现,您可以创建@Qualifier注释。它们的用法在Using Qualifiers section of the Java EE 6 tutorial中解释。
@Files
限定符:
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface Files {}
FileRetriever
实施:
@Files
public class FileRetriever implements Retriever {}
消除注射目标中Retriever
实施的消歧:
public class Bean {
@Inject @WebServices
private Retriever webServiceRetriever;
@Inject @Files
private Retriever filesRetriever;
//etc.
我的博客using JSF with CDI上有一篇文章,您可能会发现它很有用。