Spring 学习笔记(一)
来源:互联网 发布:io1.1鼠标弹道优化 编辑:程序博客网 时间:2024/06/05 21:05
一.不能被Spring AOP事务增强的方法:
1.基于接口的动态代理:除public外的其他所有的方法,此外public static也不能被增强。
2.基于CGLib的动态代理:private、static、final的方法。
二.混合数据访问技术框架:
1.Hibernate+Spring JDBC或iBatis,事务管理器:org.springframework.orm.hibernate3.HibernateTransactionManager.
2.JPA+Spring JDBC或iBatis,事务管理器:org.springframework.orm.jpa.JpaTransactionManager.
3.JDO+Spring JDBC或iBatis,事务管理器:org.springframework.orm.jdo.JdoTransactionManager.
三.底层连接资源的访问问题:
只要你的程序都使用Spring DAO的模板(如JdbcTemplate、HibernateTemplate等)进行数据访问,一定不会存在数据连接泄露的问题。如果使用Spring Dao模板进行数据操作,我们无须关注数据连接(Connection)及其衍生品(Hibernate的Session等)的获取和释放操作,模板类已经通过其内部流程替我们完成了。
如何获取这些被Spring管控的数据连接呢?Spring提供了两种方法:其一是使用数据资源获取工具类;其二是对数据源(或其衍生品如Hibernate的SessionFactory)进行代理。
直接通过数据源获取连接(jdbcTemplate.getDataSource().getConnection()),需要显式释放,不然会出现连接泄漏问题。
Spring提供了一个能从当前事务上下文中获取绑定的数据连接的工具类,那就是DataSourceUtils。Spring强调必须使用DataSourceUtils工具类获取数据连接。
Spring在有事务上下文的情况下可以只获取连接不用显式释放连接:
Connection con=DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
Spring在没有事务上下文的情况下需要显式释放连接:
Connection = null;
Try{
con=DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
}...finally{
DataSourceUtils.releaseConnection(conn,jdbcTemplate.getDataSource));
}
还可以通过TransactionAwareDataSourceProxy对数据源进行代理,数据源对象被代理后就具有了事务上下文感知的能力:
<bean id="originDataSource" class="org.apache.common.dbcp.BasicDataSource" destroy-method="close">...
<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
p:targetDataSource-ref="orginDataSource"/>
我们可以通过数据源代理对象的getConnection()获取事务上下文中绑定的数据连接了,注意方法存在事务上下文。
下面列出了不同数据访问技术对应的DataSourceUtils的等价类:
Spring JDBC:org.springframework.jdbc.datasource.DataSourceUtils.
Hibernate:org.springframework.orm.hibernate3.SessionFactoryUtils.
iBatis:org.springframework.jdbc.datasource.DataSourceUtils
JPA:org.springframework.orm.jpa.EntityManagerFactoryUtils.
JDO:org.springframework.orm.jdo.PersistenceManagerFactoryUtils.
下面列出了不同数据访问框架下TransactionAwareDataSourceProxy的等价类:
Spring JDBC:org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
Hibernate:org.springframework.orm.hibernate3.LocalSessionFactoryBean.
iBatis:org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
JPA:无。
JDO:org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy.
- Spring学习笔记(一)
- Spring学习笔记一
- Spring 学习笔记 一
- Spring 学习笔记 一
- spring学习笔记一
- spring学习笔记一
- Spring学习笔记一
- Spring学习笔记一
- Spring学习笔记一
- spring学习笔记一
- spring学习笔记一
- spring学习笔记一
- Spring学习笔记一
- Spring 学习笔记(一)
- spring学习笔记(一)
- 学习Spring笔记一
- Spring学习笔记<一>
- Spring学习笔记一
- 下载时的默认文件名的实现
- MFC BEGIN_MESSAGE_MAP()
- C++到底还能做什么?
- 写的一个东东
- Web开发之路
- Spring 学习笔记(一)
- 如何查看android数据库是否建立好 数据是否保存
- 彩色(RGB/HSV)&灰度 图像像素值读取并保存到txt文件
- 操作系统_再识(Linux介绍)
- 批量insert语句的执行技巧
- 杭电ACM HDU 3424 Range
- 分段有序数组合并成有序(空间复杂度为O(1))
- Direct3D的一些小贴士
- 让你成熟至少5岁的8句话