Spring事務(三)-プログラミング式事務コードの実践
8101 ワード
プログラミング事務
やはり経典のケースを採用して銀行振込をしてコードを構築します.張三と李四の口座が1000元あると仮定して、張三は李四に200元振り込みして、springがどのように事務を管理しているかを観察します.
一、コードの例
①dao類:
追加事務:
四、プログラミング式の事務をまとめると、文面の意味から分かります.コードを手動で作成する必要があります.「スプリング事務所の要件」から知っています.多くのサービスに事務を追加する場合、資源書類にはサービスがたくさん配置されています.そして、各サービスは事務管理テンプレートを参照してください.各方法の内容も事務配置のテンプレート方法で小包に入れます.このようなやり方は結合度が高く、開発作業量も大きいので、実際の生活で使うものは少ないです.
やはり経典のケースを採用して銀行振込をしてコードを構築します.張三と李四の口座が1000元あると仮定して、張三は李四に200元振り込みして、springがどのように事務を管理しているかを観察します.
一、コードの例
①dao類:
/**
* :taofut
* :2019-01-08 19:31
* :
*/
public interface AccountDao {
/**
* @param out
* @param money
*/
public void outMoney(String out,Double money);
/**
* @param in
* @param money
*/
public void inMoney(String in,Double money);
}
②dao実現類:/**
* :taofut
* :2019-01-08 19:33
* :
*/
public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {
/**
* @param out
* @param money
*/
public void outMoney(String out, Double money) {
String sql="update account set money = money - ? where name = ?";
this.getJdbcTemplate().update(sql,money,out);
}
/**
* @param in
* @param money
*/
public void inMoney(String in, Double money) {
String sql="update account set money = money + ? where name = ?";
this.getJdbcTemplate().update(sql,money,in);
}
}
③service類:/**
* :taofut
* :2019-01-08 19:26
* :
*/
public interface AccountService {
/**
* @param out
* @param in
* @param money
*/
public void transfer(String out,String in,Double money);
/**
* @param out
* @param in
* @param money
*/
public void transferException(String out,String in,Double money);
/**
* @param out
* @param in
* @param money
*/
public void transferTransaction(String out, String in, Double money);
}
④service実現類:/**
* :taofut
* :2019-01-08 19:29
* :
*/
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
/** */
private TransactionTemplate transactionTemplate;
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
/**
* @param out
* @param in
* @param money
*/
public void transfer(String out, String in, Double money) {
accountDao.outMoney(out,money);
accountDao.inMoney(in,money);
}
/**
* @param out
* @param in
* @param money
*/
public void transferException(String out, String in, Double money) {
accountDao.outMoney(out,money);
int i = 1 / 0;
accountDao.inMoney(in,money);
}
/**
* @param out
* @param in
* @param money
*/
public void transferTransaction(final String out, final String in, final Double money) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
//
accountDao.outMoney(out,money);
int i = 1 / 0;
accountDao.inMoney(in,money);
}
});
}
}
⑤プロファイルappication Contect.xml:
二、スプリング事務所の必要条件①リソースファイルには事務管理器と事務管理テンプレートを配置し、事務配置テンプレートには事務管理器を参照し、service類には事務管理テンプレートを参照してください.②サービス類のどの方法に事務を追加する必要がありますか?この方法の内容を下記のコードに記入します.transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
//
...
}
});
三、コードテスト結果import com.ft.demo1.AccountService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
/**
* :taofut
* :2019-01-08 20:29
* :
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringTest1 {
@Resource(name = "accountService")
private AccountService accountService;
@Test
public void demo1(){
accountService.transferTransaction("zhangsan","lisi",200d);
System.out.println(" ...");
}
}
追加していません:public void transferTransaction(final String out, final String in, final Double money) {
accountDao.outMoney(out,money);
int i = 1 / 0;
accountDao.inMoney(in,money);
}
張三さんは李四さんに200元回転しました.その後異常が発生しました.李四は200元の操作を増加しましたが、最後に張三が200元回転しました.李四はお金をもらえませんでした.200元がこのように消えてしまいました.これは明らかに不合理です.追加事務:
public void transferTransaction(final String out, final String in, final Double money) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
//
accountDao.outMoney(out,money);
int i = 1 / 0;
accountDao.inMoney(in,money);
}
});
}
張三さんは李四さんに200元回転して、異常が発生しました.最後に張三200元を引き出しませんでした.李四もお金をもらえませんでした.四、プログラミング式の事務をまとめると、文面の意味から分かります.コードを手動で作成する必要があります.「スプリング事務所の要件」から知っています.多くのサービスに事務を追加する場合、資源書類にはサービスがたくさん配置されています.そして、各サービスは事務管理テンプレートを参照してください.各方法の内容も事務配置のテンプレート方法で小包に入れます.このようなやり方は結合度が高く、開発作業量も大きいので、実際の生活で使うものは少ないです.