用spring 操作 账户转账数据
AccountService接口
public interface AccountService {
/**
* 转账操作
* @param outName 出账用户名
* @param inName 入账用户名
* @param money 转账金额
*/
public void transfer(String outName, String inName, Double money);
}
用service层实现类使用事务管理操作
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
//注入数据源对象
private DataSource dataSource;
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
public void transfer(String outName, String inName, Integer money) {
//开启事务
PlatformTransactionManager ptm = new DataSourceTransactionManager(dataSource);
//事务定义
DefaultTransactionDefinition td = new DefaultTransactionDefinition();
//事务状态
TransactionStatus ts = ptm.getTransaction(td);
//调用dao层转入资金方法
accountDao.inMoney(outName,money);
//调用daoceng转出资金方法
accountDao.outMoney(inName,money);
//提交事务
ptm.commit(ts);
}
DataSourceTransactionManager(dataSource);这是开启事务的,他需要个资源才能开启事务,这个资源用 dataSource 对象接受
但要早spring配置文件中
注入service层的bean标签里
将这个 dataSource 对象 与 dao层实现对象一起注入进去
<!--注入service实现类到bean中,-->
<!--同时将service实现类中声明的对象名称一起注入到这个配置中-->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"/>
<!--注入接受连接的变量-->
<property name="dataSource" ref="dataSource"/>
<!--<property name="dataSource" ref="dataSource"/>-->
</bean>
DefaultTransactionDefinition();
还需要创建这个事务基本信息对象
也就是事务定义的对象
作为 参数
在ptm.getTransaction(td);
获取事务状态对象后 TransactionStatus ts
才写具体处理数据的代码
最后 用 PlatformTransactionManager ptm 事务管理对象
将 事务提交 ptm.commit(ts);
上面用的是 PlatformTransactionManager对象开启事务的
用DataSourceTransactionManager对象 来开启事务
就得用 setDataSource(dataSource);来
将声明的资源对象通过 set方法设置进去
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AccountService accountService = (AccountService) ctx.getBean("accountService");
accountService.transfer("Jock1","Jock2",100D);
}
}
要将这个spring框架的代码运行起来,必须用一个实体类来写主方法,将配置对象创建出来,在spring的Bean中将通过配置文件注入的AccountService获取出来,调用它里面的方法。
这就是在配置文件注入的资源,要使用是就要创建ApplicationContext对象,用getBean 获取bean的方法 传入一个资源的名称,这样就能找到这个bean中需要使用的资源
这个资源创建出来后是通过配置文件注入到 spring 中的bean
bean是 spring IOC里面 的一种 容器,主要存储的是从外部通过依赖注入 的资源