package com.example.spring.bank; import java.math.BigDecimal; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BankApp { /** * @param args */ public static void main(String[] args) { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"classpath:META-INF/spring/applicationContext.xml"}); // Register a shutdown hook with the JVM runtime, closing this context on JVM shutdown unless it has already been closed at that time. // Delegates to doClose() for the actual closing procedure. // This will trigger the destroy-method of the DataSource in our application (for example, in case of unexpected JVM shutdown). ctx.registerShutdownHook(); AccountManager am = ctx.getBean("accountManager", AccountManager.class); // Create an account System.out.println("Creating a new account..."); Account account = am.create(); System.out.println("Account number: " + account.getAccountNumber()); System.out.println("Balance: " + account.getBalance()); // Deposit some amount System.out.println("Depositing 200.0..."); account = am.deposit(account.getAccountNumber(), new BigDecimal("200.0")); System.out.println("New balance: " + account.getBalance()); // am.chargeForLowBalance(150, 10); System.out.println("Withdrawing 50.0..."); account = am.withdraw(account.getAccountNumber(), new BigDecimal("50.0")); System.out.println("New balance: " + account.getBalance()); // Create another account Account account2 = am.create(); // Try transfer System.out.println("Trying transfer, 1st account balance: " + account.getBalance()); account = am.transfer(account.getAccountNumber(), account2.getAccountNumber(), new BigDecimal("10.00")); System.out.println("After transfer, 1st account balance: " + account.getBalance()); System.out.println("Trying transfer to possibly non-existing account, 1st account balance: " + account.getBalance()); try { account = am.transfer(account.getAccountNumber(), 5000, new BigDecimal("10.00")); } catch (Exception e) { System.err.println("An error occurred!"); e.printStackTrace(); } account = am.find(account.getAccountNumber()); System.out.println("After transfer, 1st account balance: " + account.getBalance()); ctx.close(); } }