事务管理注解配置
首先把之前的两个bean去掉,关于service层和业务层的两个bean:
业务层:BankControlIMPL
service层:Exchange
我们采用的是注解的方式,所以要引入注解解析器:
<!-- DI注解解析器 --> 对象级别
<context:annotation-config/>
<!-- IOC注解 --> class级别
<context:component-scan base-package="Spring_Data"/>
然后在业务层的class上面@Component,在service层上面@Service。
最后对应的在service层和业务层注入对应需要的对象,使用@Autowired,把两个类交给Spring帮我们来管理,到此在xml中取消了两个bean的配置,
这里需要注意的是datasource的bean不能被注解代替,原因很简单,我们不能到datasource的类里面去贴一个注解。
接下来要取消xml中事务的配置:
使用一个新的注解的配置 有三个方面的配置 1.注解本身,2.被贴注解的程序 3.赋予注解能力的第三方程序
怎么加事务控制呢?
有一个注解@Transactional--事务管理器的注解
这个可以贴在service接口的上面,也可以贴在service实现类上面,我们建议贴在service实现类上面
首先明确注解的名字@Transactional 注解本身
然后把注解@Transactional贴在service实现类上面 被贴的程序
然后在xml配置@Transactional注解解析驱动 赋予注解能力的第三方程序
<tx:annotation-driven/>
最后在对<tx:annotation-driven/>进行配置:
事务的驱动必须有一个事务管理器作为前提:
1.首先配置一个事务的管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="DataSource"/>
</bean>
2.然后在配置事务驱动:与事务管理器进行关联
<tx:annotation-driven transaction-manager="transactionManager"/>
这里需要注意的是:
配置事务的驱动的方式有两种:
1.<tx:annotation-driven/>,
如果没有配置这个transaction-manager="transactionManager"属性,Spring会直接以transactionManager属性的值去找事务管理器,
所以在创建事务管理器的时候,事务管理器的ID值一定是transactionManager,否则会报错。
2.<tx:annotation-driven transaction-manager="transactionManager"/>
如果自定义的事务管理器的ID值,那么配置事务驱动必须以第二种的方式进行配置,transaction-manager的值一定要与事务管理器的ID值相同,
否则会报错。