Have you ever wanted to win $1,000,000 with a single SpEL ( Spring Expression Language ) call? Well, now you can, and here is how.
Let’s say there is a Lottery that deposits money to a winner’s bank account and congratulates the winner:
private class Lottery { // ... public String congratulateWinner( String name, BigDecimal amount, Date date ) { String now = new SimpleDateFormat( "MM-dd-yyyy" ).format( date ); String cash = new DecimalFormat( "$#,###,###" ).format( amount.doubleValue() ); return "Congratulations " + name + "! " + "Today is " + now + ", and it's your lucky day, because " + "you just won " + cash + "!"; } } |
Here is how to make Anatoly win money with SpEL:
"congratulateWinner( 'Anatoly', #amount, #date )" |
( of course, let’s not forget to set an amount to at least a million dollars ).
And here is a million dollar unit test:
@Test public void shouldInvokeMethodWithParameters() { Lottery lottery = new Lottery(); GregorianCalendar calendar = new GregorianCalendar(); calendar.set( 2010, 8, 10 ); BigDecimal amount = BigDecimal.valueOf( 1000000.00 ); // letting SPEL know about the "lottery", the "amount" won, and the "date" EvaluationContext context = new StandardEvaluationContext( lottery ); context.setVariable( "amount", amount ); context.setVariable( "date", calendar.getTime() ); ExpressionParser parser = new SpelExpressionParser(); // using '#' to identify a variable ( NOTE: #this, #root are reserved variables ) Expression exp = parser.parseExpression( "congratulateWinner( 'Anatoly', #amount, #date )" ); String congratulations = ( String ) exp.getValue( context ); assertEquals( "Congratulations Anatoly! " + "Today is 09-10-2010, and it's your lucky day, because you just won $1,000,000!", congratulations ); } |
(!) Do not write code that does not earn you money :)