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.

 

 

原创粉丝点击