2012-07-31 100 views
0

我目前正在研究Java多模块项目,并希望通过DI减少耦合。作为一个最小的例子,我有两个模块。模块A是我通过Guice做所有注入的客户端。 Modula A在模块B中调用大多数EJB中的类,并通过@EJB注释注入自己。要让模块A调用模块B中的类,我使用JNDI查找。我现在试图摆脱JNDI并通过guice在模块B中注入类。当我这样做时,@EJB不再工作。有没有通过guice做到这一点的解决方案?用Guice开始@EJB注入

回答

1

你做什么是可能的,但只适用于从控制台访问EJB的测试场景。真正的应用程序客户端代码不应该直接访问bean。另外,尽管您可以编写自定义注入以注入EJB资源,但您的bean在EJB容器(实体,资源,服务调用,拦截器,事务)之外的行为会有所不同。所以一般说:不要混合guice和ejb注射生产代码。

+0

Thx为您的确切答案。这就是我需要知道的Guice。 JNDI是唯一的出路吗?这个想法是让DI测试变得更容易,因为JNDI的东西真的很紧密。 – 2012-08-01 13:45:41

+0

JNDI是一个非常松散的耦合。你的客户只知道一个服务接口,通过jndi查找和连接这个接口的具体实现。 – 2012-08-01 15:09:08

+0

从这个角度来看,你是对的,但我直接将JNDI调用到我的服务中,这对于没有AppServer的孤立测试是个问题。我现在重构了我的课程,并在一个额外的课程中隔离了jndi的东西,我现在可以使用mockito轻松地进行模拟。 – 2012-08-02 09:12:57