[Study] Spring Framework
来源:互联网 发布:淘宝在那里投诉卖家 编辑:程序博客网 时间:2024/05/19 06:15
package main.springframework;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import main.springframework.repository.AccountRepository;
import main.springframework.repository.InMemoryAccountRepository;
import main.springframework.service.TransferService;
import main.springframework.service.TransferServiceImpl;
@Configuration
public class AppConfig {
public @Bean TransferService transferService() {
return new TransferServiceImpl(accountRepository());
}
public @Bean AccountRepository accountRepository() {
return new InMemoryAccountRepository();
}
}
====================================================================
package main.springframework.domain;
import static java.lang.String.format;
public class Account {
private final String id;
private double balance;
public Account(String id, double initialBalance) {
this.id = id;
this.balance = initialBalance;
}
public String getId() {
return id;
}
public double getBalance() {
return balance;
}
public void debit(double amount) {
balance -= amount;
}
public void credit(double amount) {
balance += amount;
}
public static Account copy(Account src) {
return new Account(src.getId(), src.getBalance());
}
@Override
public String toString() {
return format("Account: id=%s, balance=%.2f", getId(), getBalance());
}
}
==============================================================
package main.springframework.repository;
import java.util.Set;
import main.springframework.domain.Account;
public interface AccountRepository {
Account findById(String acctId);
void update(Account account);
void add(Account account);
Set<Account> findAll();
}
package main.springframework.repository;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import main.springframework.domain.Account;
public class InMemoryAccountRepository implements AccountRepository {
private final Map<String, Account> accountsById = new HashMap<String, Account>();
public Account findById(String acctId) {
return Account.copy(accountsById.get(acctId));
}
public void update(Account account) {
if (!accountsById.containsKey(account.getId()))
throw new IllegalArgumentException("account [" + account.getId() + "] not found");
accountsById.put(account.getId(), Account.copy(account));
}
public void add(Account account) {
if (accountsById.containsKey(account.getId()))
throw new IllegalArgumentException("account [" + account.getId() + "] already exists");
accountsById.put(account.getId(), Account.copy(account));
}
public Set<Account> findAll() {
HashSet<Account> allAccounts = new HashSet<Account>();
for (Account account : accountsById.values())
allAccounts.add(Account.copy(account));
return allAccounts;
}
}
======================================================================
package main.springframework.service;
public interface TransferService {
void transfer(double amount, String srcAcctId, String destAcctId);
}
package main.springframework.service;
import main.springframework.domain.Account;
import main.springframework.repository.AccountRepository;
public class TransferServiceImpl implements TransferService {
private final AccountRepository accountRepository;
public TransferServiceImpl(AccountRepository accountRepository) {
this.accountRepository = accountRepository;
}
public void transfer(double amount, String srcAcctId, String destAcctId) {
Account srcAcct = accountRepository.findById(srcAcctId);
Account destAcct = accountRepository.findById(destAcctId);
srcAcct.debit(amount);
destAcct.credit(amount);
accountRepository.update(srcAcct);
accountRepository.update(destAcct);
}
}
======================================================================
package test.springframework;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import main.springframework.AppConfig;
import main.springframework.domain.Account;
import main.springframework.repository.AccountRepository;
import main.springframework.service.TransferService;
public class TransferServiceTest {
@Test
public void transfer100Dollars() {
// create the spring container using the AppConfig @Configuration class
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
// retrieve the beans we'll use during testing
AccountRepository accountRepository = ctx.getBean(AccountRepository.class);
TransferService transferService = ctx.getBean(TransferService.class);
// create accounts to test against
accountRepository.add(new Account("A123", 1000.00));
accountRepository.add(new Account("C456", 0.00));
// check account balances before transfer
assertThat(accountRepository.findById("A123").getBalance(), equalTo(1000.00));
assertThat(accountRepository.findById("C456").getBalance(), equalTo(0.00));
// perform transfer
transferService.transfer(100.00, "A123", "C456");
// check account balances after transfer
assertThat(accountRepository.findById("A123").getBalance(), equalTo(900.00));
assertThat(accountRepository.findById("C456").getBalance(), equalTo(100.00));
}
}
- [Study] Spring Framework
- spring study
- Collection Framework study tips- -
- .NET Framework study material
- Study Spring《IOC原理》
- Spring study guide - AOP
- Spring Boot Study
- Spring study guide - about Spring
- Spring framework
- Spring Framework
- Spring Framework
- Spring Framework
- Spring Framework
- Spring Framework
- Spring Framework
- Spring framework
- Spring Framework
- spring framework
- AssetManager asset的使用
- Qt中的错误说没有<QtNetwork>这个文件
- 第十六周任务0-3-1
- CDMA PDU 解码
- Java映射总结之Map整体框架
- [Study] Spring Framework
- 完成了2D绘图最小依赖的Ycnd 3D mini
- IIS服务器应用程序不可用的解决办法
- JSP页面跳转方法总结
- /usr/local/arm/4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/
- 利用spring AOP管理权限
- Qt中使用cout, cin, cerr
- 学习web开发的网站
- oracle 安装检测到系统的主 IP 地址是 DHCP 分配的地址