今天想玩玩spring注解,实在是out了,注解出来这么久都没怎么用过…… 拿了以前写着玩的project出来试试,第一步当然是把dao层从配置式改成注解式,不过一上来简单一改却碰到个小问题。
配置式时的dao是这么写的
public class BaseDaoImpl<T> extends JdbcDaoSupport
继承自JdbcDaoSupport后,在下面的方法里调用当然是this.getJdbcTemplate()先获取JdbcTempate对象,然后可以做各种xxx数据库交互方法。
而配置文件里则是配的dataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
...
...
</bean>
<bean id="personDao" class="com.xxx.dao.impl.PersonDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
然后开始转成注解,本以为加个注解,把xml里注释掉就ok了。于是在某一个dao的实现类里加了一行注解@Repository
@Repository(value="personDao")
public class PersonDaoImpl extends BaseDaoImpl<Person> implements PersonDao
运行tomcat后它给我报了一个错: 'dataSource' or 'jdbcTemplate' is required。 看来事情没这么简单…… 看样子是xml里的dataSource bean没有通过注解注入我的dao里。莫非要我自己写set,get吗?于是我试着在BaseDaoImpl里加入以下代码
public class BaseDaoImpl<T> extends JdbcDaoSupport{
public void setDataSource(DataSource datasource){
super.setDataSource(dataSource);
}
.
.
}
这代码肯定是有问题的啦,我只是尝试着写一下,然后就发现了一个关键的东西,eclipse给我提示说:Cannot override the final method from JdbcDaoSupport。有点惊讶,我得看看JdbcDaoSupport类了,在类里发现了以下代码
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}
setDataSource方法果然是定义成final,不让我重写……再看了一下其他方法,setJdbcTemplate也定义为final。然后就忽然明白些什么了,说实话以前学习的时候这JdbcDaoSupport东西用就用了,也没去管它是什么,为什么需要这个类。就知道getJdbcTemplate()调用后能操作数据库。而JdbcDaoSupport存在的其中一个原因,就是在配置式时兼容dataSource和jdbcTemplate两个bean,无论你xml里配哪个都可以运行。其实jdbcTemplate才是核心,因为dataSource最终还是转化成jdbcTemplate,源码如下
protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
但是当改用注解式就不行了,因为注解式时一般要用@Autowired来设定注入的bean,首先如果还要用Support类,就必须按照注解式将Support类中的dataSource设置为@Autowired,当然做不了,人家是jar包里的(要做也能做,没有必要)。而且子类里还不能重写set方法。忽然发现脑子秀逗了,既然都要重写set,那还用Support类干嘛呢,直接去掉这个extends关系好了。
然后准备在我的BaseDaoImpl里设定一个dataSource,又一想,改都改了,还要dataSource干嘛,直接用JdbcTemplate就行了。然后就改成
public class BaseDaoImpl<T>{
@Autowired
private JdbcTemplate jdbcTemplate;
绕了一圈,这样注解的问题就解决了,其实还是一很简单的问题,我了个大去上面写了那么多
最后还有一小步,因为之前所有dao的子类里,都是用的getJdbcTemplate()来获取JdbcTemplate对象的,所以再加一个方法咯。
public class BaseDaoImpl<T>{
@Autowired
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
}
这样就大功告成了,其实最后发现,这样做就相当于自己实现了一个简单的Support类,如果把源码那个类拿出来当做自己的类来用,加上@Autowired应该也可以,没去试了。而且support类里还有一些其他方法,以后去debug下看看作用。
分享到:
相关推荐
在Spring框架中,`JdbcTemplate`和`JdbcDaoSupport`是两个重要的组件,它们用于简化Java数据库连接(JDBC)的操作,提高了代码的可读性和可维护性。本篇文章将详细阐述这两个类的核心概念、使用场景以及如何在实际...
在Java的Spring框架中,`JdbcDaoSupport`是一个非常重要的工具类,它为基于JDBC的数据访问对象(DAO)提供了一种简化数据库操作的方法。这个类是`org.springframework.jdbc.core.support`包下的一个抽象基类,它为...
在本案例中,我们将深入探讨Spring 3.0框架的核心组件——Model-View-Controller(MVC)架构,以及如何结合使用Spring MVC注解和`SpringJdbcDaoSupport`类来构建一个高效、灵活的后端系统。Spring 3.0是Spring框架的...
这里,`dataSource`是一个已定义的数据源bean,Spring会自动将它注入到`myJdbcDao` bean的`dataSource`属性中,从而确保`JdbcDaoSupport`能够正确地创建和初始化`JdbcTemplate`。 总结来说,`JdbcDaoSupport`是...
XML 和注解的实现、Spring 应用之 Spring JDBC 实现、Spring 应用之 JdbcDaoSupport、Spring 应用之事务支持、Spring 与 Mybatis 整合等。 IoC 原理分析 IoC(Inverse of Control,控制反转)是 Spring 框架的核心...
在Spring框架中,`JdbcDaoSupport`是一个非常重要的类,它是Spring为简化数据库操作而提供的基础支持类。本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`...
FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate 和 ...
本文将深入探讨Spring对JDBCTemplate和HibernateTemplate的整合使用方法,以及JdbcDaoSupport和HibernateDaoSupport的支持。 **JdbcTemplate** JdbcTemplate是Spring提供的一个简单、灵活且强大的JDBC抽象层。它...
1. **简介**:SimpleJdbcTemplate和SimpleJdbcDaoSupport是Spring提供的简单JDBC模板类,用于简化数据库操作,避免了手动创建Connection、PreparedStatement等对象。 2. **使用方式**:通过继承SimpleJdbcDaoSupport...
Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库操作的繁琐过程,如连接管理、事务处理和异常转换等。这一版本3.0.5的发布,进一步优化了性能和稳定性。 ...
8. **基于XML和注解的AOP实现**: 通过`<aop:config>`标签或者`@Aspect`注解,可以定义切面、切点、通知等。 9. **Spring应用之Spring JDBC实现**: Spring提供了JDBC抽象层,简化了数据库操作,如`JdbcTemplate`...
它包括JdbcTemplate和JdbcDaoSupport等类,帮助处理SQL语句和事务管理。 6. **Spring ORM**:对象关系映射模块,与各种ORM框架(如Hibernate、JPA)集成,简化了数据库操作。通过Spring,可以统一处理数据访问异常...
3. **自动注入与便利获取**:Spring还提供了`JdbcDaoSupport`等类,这些类可以方便地进行数据源的自动注入,并且很容易地获取到模板对象,进一步减少了代码量。 #### 三、Spring与Hibernate的集成 **Hibernate** ...
- **Spring JDBC**:提供JdbcTemplate和JdbcDaoSupport等工具类简化JDBC操作,同时支持声明式事务管理。 - **Spring+Hibernate**:Spring整合Hibernate,通过HibernateTemplate进行数据库操作,并提供声明式事务...
Spring提供了两种主要的AOP实现方式:基于XML配置和基于注解。 1. **AOP原理分析** AOP的核心在于切面和通知。切面(Aspect)是关注点的模块化,比如事务管理就是一个典型的切面。通知(Advice)是在特定连接点...
通过本章节的学习,您应该能够掌握如何使用JdbcTemplate进行基本的数据库操作,以及如何在Spring中配置和使用声明式事务来管理复杂的业务流程。这些技能对于开发基于Spring框架的应用程序至关重要。
综上所述,`HibernateDaoSupport`和`JdbcDaoSupport`为Spring框架中的数据库操作提供了便利的支持。选择哪一种支持类取决于项目的具体需求和技术栈的选择。如果项目已经采用了Hibernate作为持久层框架,则推荐使用`...
此外,Spring的JdbcDaoSupport类可以作为所有基于JDBC的DAO的基类,它提供了与JdbcTemplate的集成。 6. **AOP支持**:Spring的AOP模块可以创建拦截器来增强DAO方法,例如添加日志、性能监控等功能。`spring-aop.jar...
1. **HibernateDaoSupport与JdbcDaoSupport**:Spring提供了这些支持类来简化DAO(数据访问对象)的实现,两者分别用于Hibernate和JDBC操作。它们提供了事务管理和数据源的便捷接入。 **三、Hibernate的查询方式** ...
Spring提供了JdbcDaoSupport和JpaDaoSupport等抽象类,以及JdbcTemplate、SimpleJdbcInsert等工具类,可以方便地与ibatis结合,实现DAO层的操作。 ### 示例代码分析 在给定的部分内容中,首先介绍了导入所需的包,...