Spring MVC + Hibernate DAO:无法连接 bean

     2023-02-27     32

关键词:

【中文标题】Spring MVC + Hibernate DAO:无法连接 bean【英文标题】:Spring MVC + Hibernate DAOs : unable to wire beans 【发布时间】:2012-06-01 20:49:28 【问题描述】:

我目前正在开发一个集成了 Hibernate 的 Spring MVC 项目。纯 Spring MVC 部分(DispatcherServlet + 请求映射)工作正常。现在,我必须处理的问题很奇怪:我已经阅读了“Java Persistence with Hibernate”,并且我正在尝试以与书中解释的方式相似的方式设计我的持久层。也就是说,我在两个并行的层次结构中设计了它:一个用于实现类,另一个用于接口。

所以,我有一个名为 GenericDaoImpl 的抽象类,它实现了 GenericDao 接口。然后我有一个名为 AdvertisementDaoImpl 的具体类,它扩展了 GenericDaoImpl 并实现了 AdvertisementDao 接口(它扩展了 GenericDao)。

然后,在服务 bean(标有 @Service 的类)中,我将自动装配我的 dao 类。

这是我的问题:

自动装配实现接口但扩展我的抽象 GenericDaoImpl 类的 DAO 类:好的 自动装配实现 AdvertisementDao 接口并扩展我的抽象 GenericDaoImpl 类的 AdvertisementDaoImpl:导致 bean 初始化异常。

我在 DAO 层次结构顶部的抽象类处理常见 CRUD 方法的所有样板代码。所以,我绝对想保留它。

有人对此有解释吗?

下面是一段代码:

public abstract class GenericDaoImpl <T, ID extends Serializable> implements BeanPostProcessor, GenericDao<T, ID>
    @Autowired(required=true)
    private SessionFactory sessionFactory;
    private Session currentSession;
    private Class<T> persistentClass;

...



@Repository
public class AdvertisementDaoImpl extends GenericDaoImpl<Advertisement, Long> implements AdvertisementDao 

...


    public List<Advertisement> listAdvertisementByType(AdvertisementType advertisementType, Class<? extends Good> type) 
        return null;
    



@Service
public class AdvertisementServiceImpl implements AdvertisementService
    @Autowired(required=false)
    private AdvertisementDao advertisementDao;

    public List<Advertisement> listAllAdvertisements() 

        return null;
    


这是堆栈跟踪中最相关的部分(至少,我猜是这样):

嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:be.glimmo.service.AdvertisementService be.glimmo.controller.HomeController.advertisementService;嵌套的 异常是 java.lang.IllegalArgumentException: 无法设置 be.glimmo.service.AdvertisementService 字段 be.glimmo.controller.HomeController.advertisementService 到 be.glimmo.dao.AdvertisementDaoImpl

这是我的Spring configuration(链接到 pastebin.com):

【问题讨论】:

您必须向我们准确展示您遇到的异常情况。 有点离题,但为什么通用 dao 实现了 BeanPostProcessor? 我让我的通用 dao 实现了 BeanPostProcessor,这样它包含类型化类的属性将在 bean 实例化时被初始化。但这主要是为了测试目的,因为绝对没有必要 【参考方案1】:

我认为您应该在事务管理配置中使用proxy-target-class

<tx:annotation-driven transaction-manager="transactionManagerForHibernate" 
     proxy-target-class="true" />

您描述的问题症状与Spring Transaction Management(查找表10.2)和AOP proxying with Spring中提到的症状相符:

如果要代理的目标对象至少实现一个接口 然后将使用 JDK 动态代理。所有接口 由目标类型实现的将被代理。如果目标对象 没有实现任何接口,那么将创建一个 CGLIB 代理。

因此,当默认情况下不存在 CGLIB 时,您拥有来自已实现接口的所有方法,但您将错过对来自层次结构中超类的方法的代理,这就是您在此问题上遇到异常的原因。

【讨论】:

【参考方案2】:

经过几次测试后,发现问题是由我的抽象 GenericDaoImpl 类实现 BeanPostProcessor 接口引起的:出于某种原因,该接口的方法不仅在此 bean 实例化时执行,而且在 每个 bean实例化

鉴于在我的 BeanPostProcessor 挂钩方法中,我正在检索泛型参数化类型,当这些方法针对不在我的 DAO 层次结构中的类执行时,它们最终会产生运行时异常(更具体地说,ClassCastException)。

所以,为了解决这个问题,我让我的 GenericDaoImpl 类不再实现 BeanPostProcessor 接口,并将钩子方法的主体移动到空构造函数中。

【讨论】:

Spring MVC + Hibernate:数据验证策略

】SpringMVC+Hibernate:数据验证策略【英文标题】:SpringMVC+Hibernate:datavalidationstrategies【发布时间】:2012-09-2112:49:04【问题描述】:我们都知道,SpringMVC通常与HibernateValidator和JSR-303集成得很好。但是正如有人所说,HibernateValidator只... 查看详情

从 Migrate 迁移到 Spring MVC 4 + Hibernate5

】从Migrate迁移到SpringMVC4+Hibernate5【英文标题】:MigratingfromMigratetoSpringMVC4+Hibernate5【发布时间】:2017-08-0322:39:51【问题描述】:我正在将应用程序从Jersey1.18、Spring3、Hibernate3.6、Maven迁移到全新的架构:Spring4.3(通过SpringBoot)、Hi... 查看详情

Spring MVC + Hibernate 4 + Spring Security

】SpringMVC+Hibernate4+SpringSecurity【英文标题】:【发布时间】:2012-12-0504:06:23【问题描述】:从现在开始,我一直在努力完成所有这些工作,不知道该怎么办。我相信我在SO上浏览了关于该主题的每一篇文章,并浏览了数十个教程..... 查看详情

使用 Spring Boot + Hibernate + MySql 运行 MVC 应用程序

】使用SpringBoot+Hibernate+MySql运行MVC应用程序【英文标题】:RunningaMVCappusingSpringBoot+Hibernate+MySql【发布时间】:2014-08-2207:00:11【问题描述】:我是Spring环境的新手。我试图使用SpringBoot和Hibernate作为ORM和MYSQL作为数据库来开发一个基... 查看详情

集成magnolia和spring mvc,hibernate

】集成magnolia和springmvc,hibernate【英文标题】:integratingmagnoliaandspringmvc,hibernate【发布时间】:2015-03-1814:02:50【问题描述】:我们正在使用开花插件将SpringMVC集成到Magnolia中。以下是我们集成的步骤。-创建bloom项目,然后添加一些... 查看详情

请解释spring MVC,hibernate和Spring security

】请解释springMVC,hibernate和Springsecurity【英文标题】:PleaseExplainspringMVC,hibernateandSpringsecurity【发布时间】:2017-01-0323:44:24【问题描述】:在很多指南的帮助下,我刚刚使用Spring安全性和休眠创建了我的第一个登录页面。我遇到的... 查看详情

带有 Spring、Spring MVC、Hibernate、JPA 的项目的 Maven 3 原型

】带有Spring、SpringMVC、Hibernate、JPA的项目的Maven3原型【英文标题】:Maven3ArchetypeforProjectWithSpring,SpringMVC,Hibernate,JPA【发布时间】:2013-01-1316:42:33【问题描述】:我正在尝试使用Maven3创建一个使用Spring3、SpringMVC、Hibernate4和JPA的项... 查看详情

在spring mvc中选择spring hibernate中的查询

】在springmvc中选择springhibernate中的查询【英文标题】:Selectqueryinspringhibernateinspringmvc【发布时间】:2014-07-1109:36:27【问题描述】:嗨,我正在编写一个springmvc,使用mysql数据库、hibernate注释和jsp的员工应用程序。该数据库包含一... 查看详情

Spring boot、mvc、hibernate 和 mysql 配置 - sessionFactory 错误

】Springboot、mvc、hibernate和mysql配置-sessionFactory错误【英文标题】:Springboot,mvc,hibernateandmysqlconfiguration-sessionFactoryerror【发布时间】:2017-02-1005:29:33【问题描述】:我是春季靴子的新手。我想用mysql、hibernate、jpa和jsp配置springboot。... 查看详情

Spring 框架 MVC - Hibernate 异常是 java.lang.NoSuchMethodError

】Spring框架MVC-Hibernate异常是java.lang.NoSuchMethodError【英文标题】:SpringframeworkMVC-Hibernateexceptionisjava.lang.NoSuchMethodError【发布时间】:2016-02-1506:41:00【问题描述】:我发布这个问题是关于我在JavaSpringFrameworkMVC-Hibernate中的一个项目。... 查看详情

确保 AUTHENTICATED 用户被授权访问资源的最佳实践 - Spring mvc、Spring Security、Hibernate

...TED用户被授权访问资源的最佳实践-Springmvc、SpringSecurity、Hibernate【英文标题】:BestpracticetomakesureanAUTHENTICATEDuserisAUTHORISEDtoaccessaresource-Springmvc,SpringSecurity,Hibernate【发布时间】:2016-06-1808:52:10【问题描述】:我们有一个spring 查看详情

Spring MVC“org.hibernate.PropertyAccessException”中的休眠注释映射异常

】SpringMVC“org.hibernate.PropertyAccessException”中的休眠注释映射异常【英文标题】:HibernateAnnotationMappingExceptioninSpringMVC"org.hibernate.PropertyAccessException"【发布时间】:2015-01-2017:13:18【问题描述】:我是SpringMVC和Hibernate的新手。... 查看详情

Spring MVC + Hibernate DAO:无法连接 bean

】SpringMVC+HibernateDAO:无法连接bean【英文标题】:SpringMVC+HibernateDAOs:unabletowirebeans【发布时间】:2012-06-0120:49:28【问题描述】:我目前正在开发一个集成了Hibernate的SpringMVC项目。纯SpringMVC部分(DispatcherServlet+请求映射)工作正常... 查看详情

保护spring mvc和hibernate的最佳实践

】保护springmvc和hibernate的最佳实践【英文标题】:Bestpracticetosecurespringmvcandhibernate【发布时间】:2016-10-2005:36:56【问题描述】:假设我有一个tablez包含a,b,c列。a列和b列可供任何授权用户使用,c列只能由管理员使用。我的休眠实... 查看详情

Spring Mvc Hibernate Encoding/多行导入sql

】SpringMvcHibernateEncoding/多行导入sql【英文标题】:SpringMvcHibernateEncoding/Multi-lineimportsql【发布时间】:2015-10-0516:10:11【问题描述】:我正在研究SpringMVC,在项目启动时,我已将database设置为导入默认sql使用休眠配置hibernate.hbm2ddl.imp... 查看详情

这些实体的equals和hashCode(Spring MVC + Hibernate)

】这些实体的equals和hashCode(SpringMVC+Hibernate)【英文标题】:equalsandhashCodeoftheseentities(SpringMVC+Hibernate)【发布时间】:2014-09-0409:44:07【问题描述】:有人可以建议我如何对这些实体执行equals和hashCode方法吗?这是Gara(竞赛)和Agen... 查看详情

Spring MVC (Hibernate+Maven) - 多个控制器和会话(登录/注销)

】SpringMVC(Hibernate+Maven)-多个控制器和会话(登录/注销)【英文标题】:SpringMVC(Hibernate+Maven)-MultipleControllersandSessions(Login/Logouts)【发布时间】:2017-06-2120:30:27【问题描述】:我正在使用SpringMVC、Hibernate和Maven开展一个中等规模的项... 查看详情

覆盖spring web mvc的默认Hibernate Validator

】覆盖springwebmvc的默认HibernateValidator【英文标题】:Overridespringwebmvc\'sdefaultHibernateValidator【发布时间】:2021-12-0123:06:10【问题描述】:Spring使用的是休眠工厂提供的默认验证器工厂。但是,我不想包含表达式语言依赖项。answer建... 查看详情