Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee SessionBeans和CDI与POJO类_Jakarta Ee_Design Patterns_Dependency Injection_Ejb 3.1_Stateless Session Bean - Fatal编程技术网

Jakarta ee SessionBeans和CDI与POJO类

Jakarta ee SessionBeans和CDI与POJO类,jakarta-ee,design-patterns,dependency-injection,ejb-3.1,stateless-session-bean,Jakarta Ee,Design Patterns,Dependency Injection,Ejb 3.1,Stateless Session Bean,我正在阅读JavaEE6教程,在阅读SessionBean和CDI部分时,我遇到了一些疑问 1) 据我所知,@EJB注释注入SessionBean,从而使用依赖注入模式。我知道这种模式的目的是扭转谁建造什么物体的责任。因此,它将在构造函数中接收依赖项,而不是创建它拥有的依赖项的特定类。但是,@EJB注释如何缓解不注入依赖项的问题?@Inject注释也是如此 2) 我有一个实用程序类(只包含静态方法),它将日期格式化为多种格式(yyyy-MM-dd、dd-MM-yyyy等)。对这些方法使用无状态会

我正在阅读JavaEE6教程,在阅读SessionBean和CDI部分时,我遇到了一些疑问

1) 据我所知,
@EJB
注释注入SessionBean,从而使用依赖注入模式。我知道这种模式的目的是扭转谁建造什么物体的责任。因此,它将在构造函数中接收依赖项,而不是创建它拥有的依赖项的特定类。但是,
@EJB
注释如何缓解不注入依赖项的问题?
@Inject
注释也是如此

2) 我有一个实用程序类(只包含静态方法),它将日期格式化为多种格式(yyyy-MM-dd、dd-MM-yyyy等)。对这些方法使用无状态会话Bean更好吗,还是应该保留实用程序类?在使用EJB进行此操作的情况下,使用EJB与使用
@Inject
注释使用bean有什么区别

3) 当使用依赖注入时,使用服务定位器或工厂模式有意义吗?(尽管我见过服务定位器被记录为反模式)

  • 不,依赖项注入不仅仅是为了避免创建依赖项。它还涉及避免询问容器的依赖关系。容器将依赖项注入组件,而不是询问容器依赖项。我不明白你所说的“不注入依赖项的问题”是什么意思。请澄清

  • 当您需要容器在方法周围添加事务、安全和/或远程处理方面时,通常使用会话bean。如果它只是一个实用程序类,那么就没有理由将其作为会话bean

  • 不,这没有道理。dependency注入的主要目标是取代使用服务定位器和/或工厂,以便让容器将依赖项注入bean。这就是代码易于测试的原因,因为您可以在单元测试中简单地将假依赖项(模拟对象)注入bean


  • @EJB和@Inject缓解了不注入的问题,方法是。。。注射(duh!;))

    将此实用程序方法保留在这些类中。EJB用于事务管理、资源使用、基于用户角色限制对方法的访问等。这些对于实用工具方法来说似乎都不是必需的

    最多可以通过CDI使该实用程序类可注入:为其定义接口并创建生产者方法。通常,即使这样做也有些过分,但这取决于类的确切扩展及其使用情况


    通过注入,您仍然可以拥有工厂(生产商是一种工厂),但客户并不明确使用工厂。客户机声明了一个依赖项,CDI可以使用“工厂”(生产者)来满足这一点。

    我的意思是EJB注释如何使类不依赖于bean?拥有this.bean=newbean()的主要区别是什么;还是@ejbbean?最后,这两种实现都将使类依赖于Bean,对吗?或者我在这里混淆了概念?依赖注入的目的不是消除依赖。其要点是从外部注入它们。这允许在单元测试中手动注入虚假的依赖项。因此,更多的研究让我相信依赖项注入实际上只是为了简化模拟bean集的单元测试。我一直在努力理解它是如何帮助我们的that@MiguelRibeiro容器无法拦截“new()”。通过依赖注入或at查找,容器可以在代理中切换,这就是EJB和CDI的强大之处。