解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题

目的: 
想改用spring框架强大的注解功能(@Repository注解)来实现自动注册dao的bean的功能(原来是在xml中配置的)。改完之后,运行的时候直接报错:

Error creating bean with name ‘UserVODao‘ defined in file
[D:\JSP_MyEclipse\.metadata\.me_tcat7\webapps\XYG_WEBDEV_SAMPLE\WEB-INF\classes\com\xinyiglass\springSample\dao\impl\UserVODaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: ‘dataSource‘ or ‘jdbcTemplate‘ is required

接着就是想着如何解决问题。网上找了一些资料,结合自己的理解,报错的原因是:修改之后,XML里面配置的DataSource就无法被Spring容器主动注入到dao里面!从而在初始化dao(此dao有继承了JdbcDaoSupport类)的bean的时候,如果获取不到DataSource或者JdbcTemplate的话,会报错:无法找到数据源。

备注:没修改之前,是用xml配置主动注入的:

<bean id="UserVODao" class="com.xinyiglass.springSample.dao.impl.UserVODaoImpl" parent="abstractDao"/>
<bean id="abstractDao" abstract="true"><property name="dataSource" ref="dataSource"/></bean>

网上找了几个文章,写得不错: 
JdbcDaoSupport和Spring注解的转换 http://www.verydemo.com/demo_c143_i2948.html 
Spring中JdbcDaoSupport的DataSource注入问题 http://www.tuicool.com/articles/JZnqIb 
@Repository 不能直接用的解析 http://splinter-2.iteye.com/blog/1069765 
用@Repository的一个实例:http://blog.csdn.net/show_me_the_world/article/details/47055841

最后,还是得在国外的一个网站中找到了解决办法!!百度了1个多小时,在国内的博客找了一遍都找不到我想要的解决办法。 
http://www.mkyong.com/spring/how-to-autowire-datasource-in-jdbcdaosupport/ 
http://stackoverflow.com/questions/10570521/spring3-annotation-jdbcdaosupport 
注意:搜索关键字:JdbcDaoSupport @Repository

附上最终的解决办法: 
方法1:最简洁,用重写类构造函数的办法自动装配daoSupport需要用到的数据源!

@Autowired
    UserVODaoImpl(DataSource dataSource) {
        setDataSource(dataSource);
    }

方法2:也是差不多,初始化的时候自动装配数据源。

    @Autowired
    private DataSource dataSource;

    @PostConstruct
    private void initialize() {
        setDataSource(dataSource);
    }
时间: 2024-10-25 01:18:22

解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题的相关文章

Spring框架针对dao层的jdbcTemplate操作crud之delete删除数据库操作 Spring相关Jar包下载

首先,找齐Spring框架中IoC功能.aop功能.JdbcTemplate功能所需的jar包,当前13个Jar包 1.Spring压缩包中的四个核心JAR包,实现IoC控制反转的根据xml配置文件或注解生成对象 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLHzAW 2.以及日志jar包,以便查看相关执行细节 commons-logging 和log4j 下载地址: https://pan.baidu.com

Spring框架针对dao层的jdbcTemplate操作 包括crud

crud指数据库或者持久层的基本操作,包括 增加(Create).读取查询(Retrieve 取回).更新(Update)和删除(Delete) Spring不仅对JDBC进行了封装,也对Hibernate进行了封装,还有Ibatis jdbcTemplate与Java Web时的dbutils小型框架功能类似 封装简化了代码,确需要jar包的支持,jdbcTemplate还需要两个jar包: spring-jdbc-4.2.4.RELEASE.jar spring-tx-4.2.4.RELEA

用 OpenSessionInViewInterceptor 的思路解决 Spring框架中的Hib

众所周知, 为了解决 Hibernate Lazy 问题, Spring 中引入了 OpenSessionInViewInterceptor, 这样虽然解决了页面上的 Lazy Load 问题,却增加了各层之间的偶合性, 如果一个 Lazy 的 Collection 在页面上可以被正确的 load, 但是如果请求不是来自于 HttpServletRequest (比如在 TestCase 或 Service 中希望获取 lazy 的属性), 一般会导致两种错误: 代码 [java] view p

深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致. service层.存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方

解决Spring框架下中文乱码的问题

在使用了Spring框架下回发现很多表单交互的地方会发生乱码,而且写到数据库中也是乱码,这其实还是字符编码的问题,在我们还在用自己写的servlet的时候,直接在request和response加上字符约束就好了,但是我们在使用spring的时候,这样做就失去了框架的意义. 这时候我们可以使用一个过滤器来将转码. 如果你这样: 1 str = new String(str.getBytes("ISO-8859-1"), "GBK"); 转码. 写出来程序通用性不好,

Spring框架第四篇之基于注解的DI注入

一.说明 与@Component注解功能相同,但意义不同的注解还有三个: 1)@Repository:注解在Dao实现类上 2)@Service:注解在Service实现类上 3)@Controller:注解在SpringMVC的处理器上 Bean作用域: @Scope("prototype"):用于指定对象创建模式,可以是单例模式或者原型模式,默认是singleton 基本类型属性注入: @Value @Autowired:byType方式的注解式注入,即根据类型注解 @Qualif

spring框架学习笔记3:使用注解代替配置文件

1.导入context约束:spring-context-4.2.xsd 2.design模式打开xml配置文件,右键edit namespaces,点击add添加 完成后应该是这样: 配置文件中这样写即可: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="

Spring框架中Bean管理的常用注解

1. @Component:组件.(作用在类上)可以作用在任何一个类上 2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) * @Controller -- 作用在WEB层(同样可以使用@Component,因为@Controller是@Component的细化.下面两个组件同) * @Service -- 作用在业务层 * @Repository -- 作用在持久层 * 说明:这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强 3. 属性

spring框架的bean管理常用的注解

1.除了导入spring四个核心以及日志jar包外,还需要导入aop包 2.在配置文件中添加注解扫描 扫描指定包下的注解 <context:component-scan base-package=" * "></context:component-scan> 扫描属性上的注解 <context:annotation-config></context:annotation-config> 3.作用在类上面的注解(用于创建对象使用,value