Java EJB3-通过注入和查找获取bean-有什么区别、含义和问题?
我知道有两种方法可以获得EJB实例:Java EJB3-通过注入和查找获取bean-有什么区别、含义和问题?,java,ejb-3.0,Java,Ejb 3.0,我知道有两种方法可以获得EJB实例: 通过@EJB注释在servlet和EJB中注入依赖项 通过Context.lookup anywhere查找JNDI 使用这两种方法的区别、含义和局限性是什么?它们是一样的吗?依赖注入比查找快吗?事务处理和对象生命周期管理如何 我知道的事情包括: 注释 仅适用于servlet和EJB 方便的语法 容器独立 查找 可以在运行时以编程方式实例化EJB接口的不同实现 在任何地方工作-例如,POJOs 取决于容器的命名约定 查找取决于JNDI实现的存在,也
- 通过@EJB注释在servlet和EJB中注入依赖项
- 通过Context.lookup anywhere查找JNDI
- 仅适用于servlet和EJB
- 方便的语法
- 容器独立
- 可以在运行时以编程方式实例化EJB接口的不同实现
- 在任何地方工作-例如,POJOs
- 取决于容器的命名约定
@EJBs(…)
“导入”了本地EJB之后,从POJO中查找本地EJB才会起作用。看见为此,您需要了解本地和全局JNDI之间的区别
我的建议是:尽可能多地使用注释。如果POJO需要对EJB的引用,则将其作为参数传递(例如在构造函数中)。这就是所谓的依赖倒置,无论如何这是一个很好的实践。我认为模仿带注释的EJB有点困难。使用lookup时,您可以根据您的环境构建一些交换机(test->LoginMockBean,production->LoginBean)。这是错误的。如果它是由容器注入的,这意味着您可以更轻松地在测试中自己注入它,例如
MyBean=newmybean();bean.injectedBean=new Mock()
。查找中的挂钩更为复杂,尤其是当代码依赖于new InitialContext()
时。如何为测试返回上下文的特殊版本?