一、spring事物
spring配置中:
在spring配置文件中引入<tx:>命名空间
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byType" default-lazy-init="true">
事务管理器的配置:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
上面这段配置不足于开启事务行为,它仅仅 是一种元数据,提供给注解了 @Transactional具有事务行为的beans使用。
<tx:annotation-driven />
这个注解是开启事务。
注解使用:@Transactional 注解可以应用于接口定义和接口方法、类定义和类的 public 方法上。
当一个方法中有多个增删改时,使用事务。
@Transactional注解中的一些参数
1.rollbackFor(该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。)
例如:@Transactional(rollbackFor = Exception.class)
2.readOnly(设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。)
例如:@Transactional(readOnly=true)
3.noRollbackFor(用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。)
例如:@Transactional(noRollbackFor=RuntimeException.class) ----指定单一异常类
@Transactional(noRollbackFor={RuntimeException.class, Exception.class} ----指定多个异常类
4.timeout(用于设置事务的超时秒数,默认值为-1表示永不超时。)
5.isolation(用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置)
@Transactional只能用在public方法上才会有效,在 protected、private 方法上用该注解,随不报错,但没有作用。
在controller类中使用事务注解也能有效,但极其不推荐在
controller中使用该注解。
一般在service中使用@Transactional 注解。
Spring的核心是IOC和AOP ,IOC是依赖注入和控制反转, 其注入方式可分为set注入、构造器注入、接口注入等等。IOC就是一个容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。简单理解就是:JAVA每个业务逻辑处理至少需要两个或者以上的对象协作进行工作,但是每个对象在使用它的合作对象的时候,都需要频繁的new 对象来实现,你就会发现,对象间的耦合度高了。而IOC的思想是:Spring容器来管理这些,对象只需要处理本身业务关系就好了。至于什么是控制反转,就是获得依赖对象的方式反转了。
AOP呢,面向切面编程,最直接的体现就是Spring事物管理。
在控制器上指定新的@RestController之后,就不需要在每个@RequestMapping方法上加 @ResponseBody。
开发Rest服务器端的时候,spring-mvc配置文件只需加入如下一行配置即可。
<context:component-scan base-package="com.psbc">
</context:component-scan>