CDI是否为默认生产者提供api?

时间:2012-06-29 18:42:12

标签: java dependency-injection java-ee-6 guice cdi

我有一堆依赖项被编写为快速二进制Web服务(又名Ejb3.1)。这是服务延期:

@Remote
public interface MyService {...}

您可以使用以下语法将EJB注入到servlet或托管bean中:

@EJB
MyService myService;

但我不想使用@EJB注射。我想使用普通的CDI:

@Inject
MyService myService;

实现此目的的一种方法是为每个EJB创建一个@Produces方法:

@Produces MyService produceMyService(InjectionPoint ijp){
 //jndi lookup for MyService interface
}

但是,InjectionPoint能够为您提供所需的所有信息,例如目标类名(在本例中为MyService)。

CDI有办法做这样的事吗?如果不能以任何其他方式满足所需的注入点,我想最后调用这个生产者。

@Produces Object produce(InjectionPoint ijp){
 Class ejbInterface = ijp.getType();
 //jndi lookup for ejbInterface
}

这是一个令人困惑的帖子,所以请提出澄清问题。万分感谢!

1 个答案:

答案 0 :(得分:3)

假设我理解你的问题(见评论):不,这没有API。

好消息是有一种方法可以实现这一点 - 但您可能不希望在运行时执行此操作,这对于应用程序启动来说非常重要。

CDI extension mechanism容器启动中的bean处理提供了一些定义良好的钩子。这是决定启用/禁用某些托管bean的逻辑的理想场所(可能基于静态类路径信息)。

查看Seam Solder@Requires的功能和实现。这应该与您的用例非常接近......