我知道有两种获取EJB实例的方法:
使用这两种方法有什么不同,含义和陷阱?它们是一样的吗?依赖注入比查找更快吗?那么事务处理和对象生命周期管理呢?
我所知道的事情包括:
注释
查找
答案 0 :(得分:6)
两者都达到了相同的效果。这更像是耦合的问题。使用注释,您可以实现松散耦合,并且更容易进行模拟和测试。通过直接查找,您可以依赖于有时可能不方便的初始上下文。
恕我直言查找无处不在。例如,在Glassfish中,只有先前使用@EJBs(...)
在使用POJO的一个会话bean上“导入”,才能从POJO查找本地EJB。见this discussion。您需要了解本地和全局 JNDI之间的区别。
我的建议是:尽可能使用注释。如果POJO需要对EJB的引用,则将其作为参数传递(例如,在构造函数中)。这就是所谓的依赖倒置,无论如何都是一种很好的做法。
答案 1 :(得分:2)
查找依赖于JNDI实现的存在,也就是说,您必须配置JNDI实现才能运行单元测试,然后可以手动配置带注释的字段。
答案 2 :(得分:0)
我认为模拟带注释的EJB很难。使用查找时,您可以根据您的环境构建一些开关(test - > LoginMockBean,production - > LoginBean)。