栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

未将Spring DAO注入JSF管理的bean中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

未将Spring DAO注入JSF管理的bean中

简而言之,您的bean应该由JSF或Spring完全管理。

有很多证据表明这一点。只需在此处和/或在网上查找“ JSF +spring整合”即可。

现在让我考虑一下这个问题,以增进您的理解。

许多Web应用程序由应用程序的几个“层”组成,也称为“层”:Web层或表示层,用于查看应用程序的页面;业务层;或中间层,用于执行应用程序和数据层的逻辑和业务规则,或用于将数据传输到数据库或从数据库传输数据的持久层。这些层可能具有以下配置:

  1. Entity
    这些类将保存从您的数据库派生的数据,并且最可能被Hibernate之类的ORM框架使用;
  2. DAO
    将用于访问数据库并至少对数据库执行CRUD操作(最重要的是对于Web部件)的类返回Web层的Entity类;
  3. Service
    反映您的应用程序提供的业务操作的类;
  4. Bean
    这些类将备份您的视图,并且很可能包含网页中使用的数据,操作方法,转换等。

下一步是为Web应用程序选择框架。

  1. 您为所有层选择Spring,这意味着您的DAO将是

    @Repository
    类,服务将是
    @Service
    类,而Beans将是
    @Component
    类。您很可能会使用像Hibernate这样的ORM框架来处理数据库,因此您的Entities将
    @Entity
    是以Hibernate样式正确配置的JPA 类。您的视图技术很可能是经过精心设计以与Spring核心一起使用的Spring MVC。例如,Mkyong有许多关于使用Spring的简单教程。

  2. 您为所有层选择本地JSF + EJB框架,这意味着您的DAO和服务将是

    @EJB
    类,而bean将是
    @ManagedBean
    类。您很可能还将Hibernate用作ORM解决方案和JPA提供程序,并将通过进行数据库访问
    EntityManager
    。您的视图技术将是JSF,因为它原本打算与上述技术一起使用。例如,BalusC有许多关于使用JSF的启发性教程。

两种选择都有其倡导者和反对者。有的人说为什么选择不是 Sun的 Oracle解决方案所固有的东西,有的人说这太复杂和令人困惑,并且缺乏可学习的资源。

因为这在技术选择上没有争议,所以在此不做详细介绍,但要指出的是,Spring是一个轻量级的容器,可以在像Tomcat这样的简单servlet容器上运行,而EJB需要像Glassfish这样的应用程序服务器才能运行。我认为这是将JSF作为基于组件的Web框架并将Spring作为轻量级依赖注入和业务层框架相结合的主要推动力。

当我们决定将两个框架集成在一起时,我将解释该集成如何工作以及为什么会出现NPE。

  1. 实体类将是JPA / Hibernate注释的类,或者是由xml配置的简单POJO。
  2. DAO将
    @Repository
    实现基本接口以避免紧密耦合。它们将由Spring框架管理。
  3. 服务还将
    @Service
    实现基本接口。它们也将由Spring框架管理。请注意,如果您使用标记服务方法,Spring框架将为您提供现成的事务管理
    @Transactional
  4. 因此,如果要将Bean 用作依赖项注入框架,并且必须通过Spring进行管理
    @Component
    @Scope("value")
    并且可以通过Bean访问服务和其他Bean,则Bean必须并且必须由Spring管理
    @Autowired

因此,NPE源自误解,即您的bean作为视图的逻辑部分应由JSF管理(请注意,这

@ManagedProperty
也无法正常工作)。该bean由JSF实例化,但是您的服务驻留在JSF知道的Spring上下文中,因此无法进行注入。另一方面,如果bean仍在Spring上下文中,则它的生命周期和依赖关系将由Spring注入。

因此,要使其工作,请将bean标记为

@Component@Scope("request")public class SpringManagedBeanToBeUsedByJSF {    ...    @Autowired    private SpringService springService;    ...}

并做好将Spring与JSF结合使用的所有先决条件。如果您迷路了,请参考此出色的示例进行设置。这样,当您在faces-config.xml中附加EL-
resolver(允许JSF“查看” Spring
Bean)和web.xml中的必要侦听器时,所有bean都将由Spring管理,并在JSF视图中可见。当您这样做时,所有的Spring
Bean都可以在.xhtml文件中引用,并且如果您需要将JSF操作放入Bean中,只需继续将它们放入(Spring)托管的Bean中,或使其变得至关重要即可到JSF接口等。只能通过这种方式实现集成。当然,您也可以使用JSF托管Bean,

@FacesConverter
并且
@FacesValidator

应用程序中的类也不会相互干扰,但是将两个依赖注入框架与一个应用程序一起使用至少会造成混淆。

希望这可以帮助您更好地了解情况。

您的代码中也存在一些问题,我不会在此一般性回答中强调。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号