-
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(公共2): @applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" 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/context http://www.springframework.org/schema/context/spring-context.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"> </beans> @jdbc.properties jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///imooc jdbc.username=root jdbc.password=.查看全部
-
//相关代码(声明式 III——基于注解的方式)——(下): <!-- 配置业务层类 --> <bean id="accountService" class="cn.muke.spring.demo4.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property> </bean> <!-- 配置DAO层类 --> <bean id="accountDao" class="cn.muke.spring.demo4.AccountDaoImpl"> <!-- 注入连接池,会帮我们创建一个JDBC模版 --> <property name="dataSource" ref="dataSource" ></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" ></property> </bean> <!-- 开启注解事务:只有开启这个注解事务,才可以使用注解 --> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation> </beans> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(声明式 III——基于注解的方式)——(中): @SpringDemo4.java package cn.muke.spring.demo4; /** * Spring的声明式事务管理的方式三的测试类:基于注解的事务管理方式。 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext4.xml") public class SpringDemo4 { @Resource(name="accountService") private AccountService accountService; /** * 转账案例的测试类 */ @Test public void demo1(){ accountService.transfer("aaa", "bbb", 200d); } } @applicationContext4.xml <beans...> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"></context:property> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="jdbcUrl" value="${jdbc.url}" ></property> <property name="user" value="${jdbc.username}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(声明式 III——基于注解的方式)——(上): @AccountServiceImpl.java package cn.muke.spring.demo4; /** * 转账案例的业务层实现类 */ /** * propagation :事务的传播行为。 * isolation :事务的隔离级别,比如,Isolation.DEFAULT:数据库默认级别。 * readonly :只读(不可进行修改、插入、删除操作,否则报错)。 * rollback-for :发生哪些异常回滚事务。 * no-rollback-for :发生哪些异常事务不回滚,继续提交。 * timeout :过期信息。 */ @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED) public class AccountServiceImpl implements AccountService { // 注入转账的DAO的类 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i=1/0;//这样一来,上面可以成功执行,下面就不会得到执行 accountDao.inMoney(in, money); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(声明式 II——基于AspectJ的XML方式)——(下): <!-- 配置事务的通知(事务的增强) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- prop格式: * propagation :事务的传播行为。 * isolation :事务的隔离级别,比如数据库默认级别。 * readonly :只读(不可进行修改、插入、删除操作,否则报错)。 * rollback-for :发生哪些异常回滚事务。 * no-rollback-for :发生哪些异常事务不回滚,继续提交。 * timeout :过期信息。 --> <tx:method name="transf*" propagation="REQUIRED" ></tx:method> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <!-- 配置切入点:最前面的 “ * ” 表示:方法任意返回值;AccountService+ “ + ” 表示:AccountService的子类 --> <aop:pointcut expression="execution(* cn.muke.spring.demo3.AccountService+.*(..))" id="pointcut1"></aop:pointcut> <!-- 配置切面 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"></aop:advisor> </aop:config> </beans> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(声明式 II——基于AspectJ的XML方式)——(中): @applicationContext3.xml <beans...> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置业务层类 --> <bean id="accountService" class="cn.muke.spring.demo3.AccountServiceImpl"> <property name="accountDao" ref="accountDao"/> </bean> <!-- 配置DAO层类 --> <bean id="accountDao" class="cn.muke.spring.demo3.AccountDaoImpl"> <!-- 注入连接池,会帮我们创建一个JDBC模版 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>查看全部
-
//相关代码(声明式 II——基于AspectJ的XML方式)——(上): //package cn.muke.spring.demo3; @AccountServiceImpl.java /** * 转账案例的业务层实现类 */ public class AccountServiceImpl implements AccountService { // 注入转账的DAO的类 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i=1/0;//这样一来,上面可以成功执行,下面就不会得到执行 accountDao.inMoney(in, money); } } @SpringDemo3.java /** * Spring的声明式事务管理的方式二的测试类:基于AspectJ的XML方式配置 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext3.xml") public class SpringDemo3 { /** * 注意:这里与方式一不同的是,不需要用 @Resource(name="ProxyClassName"),因为底层自动匹配 */ @Resource(name="accountService") private AccountService accountService; /** * 转账案例的测试类 */ @Test public void demo1(){ accountService.transfer("aaa", "bbb", 200d); } }查看全部
-
//相关代码(声明式 I——基于TransactionProxyFactoryBean的方式)——(下): <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置业务层的代理 --> <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 配置目标对象 --> <property name="target" ref="accountService" ></property> <!-- 注入事务管理器 --> <property name="transactionManager" ref="transactionManager" ></property> <!-- 注入事务属性 --> <property name="transactionAttributes"> <props> <!-- prop格式: * PROPAGATION:事务的传播行为。 * ISOLATION :事务的隔离级别。 * readOnly :只读(不可进行修改、插入、删除操作,否则报错)。 * -Exception :发生哪些异常回滚事务。 * +Exception :发生哪些异常事务不回滚,继续提交。 注意:如果设置多个值,用“,”隔开。 --> <prop key="transf*">PROPAGATION_REQUIRED,+Exception</prop> </props> </property> </bean> </beans> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
//相关代码(声明式 I——基于TransactionProxyFactoryBean的方式)——(中): @applicationContext2.xml <beans...> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置业务层类 --> <bean id="accountService" class="cn.muke.spring.demo2.AccountServiceImpl"> <property name="accountDao" ref="accountDao"/> </bean> <!-- 配置DAO层类 --> <bean id="accountDao" class="cn.muke.spring.demo2.AccountDaoImpl"> <!-- 注入连接池,会帮我们创建一个JDBC模版 --> <property name="dataSource" ref="dataSource" /> </bean>查看全部
-
注意:无论是编程式还是声明式方式,配置事务管理器一定要有。代码如下: <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" ></property> </bean> 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
声明式注解第三种方式,除了在spring的配置文件添加事务管理器的bean,还要打开事务的注解,引用事务管理器。然后在需要事务管理的业务类添加一个事务注解,注解的值可以指定转播行为,是否只读,隔离级别查看全部
-
声明式事务管理第二种方式:通过使用aop的方式,spring配置文件定义一个通知,制定事务管理器和事务传播行为等,再配置apo的切入点和切面,切面引用切入点,制定切入的方法等查看全部
-
声明式事务管理,就是在spring的配置文件,添加事务管理代理的bean,里面引用要代理的业务bean和事务管理器,并且制定事务属性说明事务要操作业务类的方法,和隔离级别,传播行为等查看全部
-
事务管理器,需要引用连接池获取连接connection对象 是用事务管理模板来操作事务管理器,然后在需要事务管理的业务类注入事务管理模板对象,调用指定方法,把需要事务操作的代码写在它的匿名内部类的方法中即可,这就是编程式事务管理,通过代码的方式实现查看全部
举报
0/150
提交
取消