到目前为止,我几乎总是使用无接口的EJB,并且对@Local注释的需求有了一些了解。考虑下面这个例子:EJB 3.1。是否需要@Local注释?
public interface MyBeanIntf { void doStuff(); }
@Stateless
public class MyBean implements MyBeanIntf { public void doStuff(){ } }
如若MyBeanIntf
被标记为@Local
?我没有看到来自任何好处,因为即使当我不标注它作为@Local
,我仍然可以使用DI妥善它注入到UI控制器:
@Named
@SessionScoped
public class TestController implements Serializable {
// injection works perfectly, even when MyBeanIntf is not marked as @Local
@Inject
private MyBeanIntf myBean;
// or even like this:
// @EJB
// private MyBeanIntf myBean;
}
让我们更加复杂:
public interface MyBeanIntf { void doStuff(); }
public class MySuperBean implements MyBeanIntf { public void doStuff() { } }
@Stateless
public class MyBean extends MySuperBean { }
是MyBean
现在认为是有效的Local EJB
bean?我有一些疑问,因为它间接地实现了接口。
感谢您的回答。至于说明的链接,我仍然有一些疑问。它明确地讨论了超类,它们本身就是会话bean。但是如果它们只是没有'@ Stateless'或'@ Stateful'注解的抽象类呢? – jFrenetic 2012-01-29 12:26:49
当然,我不确定100%,但看看编辑后的文章 - 也许它会有所帮助。 – 2012-01-29 12:48:47
感谢您的重视。我自己阅读了这部分内容,但不知何故错过了它。 – jFrenetic 2012-01-29 13:11:17