对自己要求要更严格一些,对别人要再多宽容一些。

Spring事务管理(声明方式)

上一篇 / 下一篇  2009-12-29 15:32:01 / 个人分类:JAVA学习

Spring声明式事务管理主要有:TransactionProxyFactoryBeanBeanNameAutoProxyCreator方式。

1.transactionProxyFactoryBean方式的配置:

 <!-- JDBC模板 --> 
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource"> 
      <ref local="dataSource"/> 
    </property> 
  </bean> 
  <!-- 数据源 --> 
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName"> 
      <value>oracle.jdbc.driver.OracleDriver</value> 
    </property> 
    <property name="url"> 
      <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value> 
    </property> 
    <property name="username"> 
      <value>anita</value> 
    </property> 
    <property name="password"> 
      <value>123</value> 
    </property> 
  </bean> 
  <!--事务模板 --> 
  <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager"> 
      <ref local="transactionManager"/> 
    </property> 
  </bean> 
  <!-- jdbc事务管理器 --> 
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource"> 
      <ref local="dataSource"/> 
    </property> 
  </bean> 
  <bean id="testDao" class="com.sini.testting.JdbcTemplateTest"> 
    <property name="jdbcTemplate"> 
      <ref local="jdbcTemplate"/> 
    </property> 
  </bean> 
  <!--   方式一:使用TransactionProxyFactoryBean代理
  <bean id="testDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
    <property name="transactionManager"> 
      <ref local="transactionManager"/> 
    </property> 
    <property name="target"> 
      <ref local="testDao"/> 
    </property> 
    <property name="transactionAttributes"> 
      <props> 
        <prop key="*">PROPAGATION_REQUIRED</prop> 
      </props> 
    </property> 
  </bean>
</beans>

2.BeanNameAutoProxyCreator方式的配置文件

 <!-- JDBC模板 --> 
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource"> 
      <ref local="dataSource"/> 
    </property> 
  </bean> 
  <!-- 数据源 --> 
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName"> 
      <value>oracle.jdbc.driver.OracleDriver</value> 
    </property> 
    <property name="url"> 
      <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value> 
    </property> 
    <property name="username"> 
      <value>anita</value> 
    </property> 
    <property name="password"> 
      <value>123</value> 
    </property> 
  </bean> 
  <!--事务模板 --> 
  <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager"> 
      <ref local="transactionManager"/> 
    </property> 
  </bean> 
  <!-- jdbc事务管理器 --> 
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource"> 
      <ref local="dataSource"/> 
    </property> 
  </bean> 
  <bean id="testDao" class="com.sini.testting.JdbcTemplateTest"> 
    <property name="jdbcTemplate"> 
      <ref local="jdbcTemplate"/> 
    </property> 
  </bean>

<!-- 方式二:使用自动代理-->
  <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager"> 
      <ref local="transactionManager"/> 
    </property> 
    <property name="transactionAttributes"> 
      <props> 
        <prop key="*">PROPAGATION_REQUIRED</prop> 
      </props> 
    </property>
  </bean>
  <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
    <property name="beanNames"> 
      <list> 
        <!-- 需要管理事务的bean,可以定义若干个 -->
        <value>testDao</value> 
      </list> 
    </property> 
    <property name="interceptorNames"> 
      <list> 
        <!-- 事务通知,可以定义多个通知 
        <value>transactionIntercep</value>  -->
      </list> 
    </property> 
  </bean>
</beans>

3.测试代码:

public class JdbcTemplateTest {

 /**
  * @param args
  */
 public JdbcTemplate jdbcTemplate=null;
 public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
 {
  //设置JDBC模板
  this.jdbcTemplate=jdbcTemplate;
 }
 public void InsertUser()
 {
  jdbcTemplate.execute("insert into student values('500','200','200')");
  //jdbcTemplate.execute("insert into student values('400','200','200')");
  
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //获取配置文件
  ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");
  //实例化TransactionProxyFactoryBean代理,使用方式一
  //JdbcTemplateTest test=(JdbcTemplateTest)ctx.getBean("testDaoProxy");
  //实例化自动代理BeanNameAutoProxyCreator
  JdbcTemplateTest test=(JdbcTemplateTest)ctx.getBean("testDao");
  //执行插入操作
  test.InsertUser();
 }
}


TAG:

 

评分:0

我来说两句

日历

« 2024-05-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 29312
  • 日志数: 52
  • 文件数: 1
  • 书签数: 4
  • 建立时间: 2009-04-20
  • 更新时间: 2010-02-02

RSS订阅

Open Toolbar