1、Spring 的声明式事物声明式事务的原理:声明式事务处理通过 AOP 的实现把事物管理代码作为方面封装来横向插入到业务代码中,使得事务管理代码和业务代码解耦。在折冲形式我们结合 IOC 容器和 spring 已有的 FactoryBean 来对事务管理执行属性配置,比如传播行为,隔离级别等。其中最基本的形式就是通过配置 TransactionProxyFactoryBean来实现声明式事务。声明式事务的配置:步骤一:声明委托对象步骤二:定义事务管理器步骤三:创建事务代理父工程PROPAGATION_REQUIRED注意:1、abstract=”true”说明该工厂为抽象工厂,无法进行对象处理
2、,只能被继承2、transactionAttributes 表示设置事务的传播属性步骤四:创建事务子工厂步骤五:往需要 userDao 对象的调用者注入 userDao注意:注入的是代理 userDao 对象的事务子工厂,并且使用接口声明如 IuserDao userDaoProxy/省略 get,set 方法声明式处理中的异常处理Spring 中,将委托对象的每个方法创建事务,spring 的事务支持默认对运行期异常(RuntimeException)进行回滚,而 RuntimeException 无需开发者显示声明。如果手动捕获异常,则 spring 容器认为开发者试图进行手动事务回滚,将
3、无法用 spring 容器来进行事务回滚。但是如果发生非 RuntimeException 及其子类的异常,则 spring 容器无法进行事务处理,如果需要管理,需要进行相关配置,代码如下:/+提交,- 回滚,后面为异常类型,表示该方法如果抛出异常则进行相应的事务处理PROPAGATION_REQUIRED,-FileNotFoundExceptionreadOnlyRuntimeException 和非 RuntimeE 的区别Exception 体系包括 RuntimeException 体系和其他非 RuntimeException 的体系 (1) RuntimeException 体系
4、:包括错误的类型转换、数组的越界访问和试图访问空指针等。处理 RuntimeException 的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如可以通过检查数组下标边界类避免数据越界问题异常。NumberFormatException:继承 IllegalArgumentException,字符串转换为数字时。 比如 int i= Integer.parseInt(“ab3“); ArrayIndexOutOfBoundsException:数组越界 比如 int a=new int3; int b=a3; StringIndexOutOfBoundsExce
5、ption:字符串越界 比如 String s=“hello“; char c=s.chatAt(6); ClassCastException:类型转换错误 比如 Object obj=new Object(); String s=(String)obj; (2)其他非 RuntimeException(IOException 等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。总结:Spring 配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager 和代理机制者三部分组成,无论那种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager 这两部分只是会根据数据访问方式有所变化,比图使用Hibernate 进行数据访问时好,DataSource 实际为 S 二十四年 Factory,TransactionManager