Spring 2.0

36
Spring 2.0 News and code Björn Granvik, CTO Jayway

description

News in Spring 2.0. Very short on time and lots of slides, hence the first three slides explains my dialect skånska to the audience. ;)

Transcript of Spring 2.0

Page 1: Spring 2.0

Spring 2.0News and code

Björn Granvik, CTO Jayway

Page 2: Spring 2.0

Agenda

What is Spring?

New in Spring 2.0

Aspect Oriented Programming

Summary

Page 3: Spring 2.0

Skånska: R

[:R]

Page 4: Spring 2.0

Skånska: Diftonger

långt a, [a:] blir ibland ao eller auoe blir ibland eii blir ijo blir iou blir ibland äuy blir ibland öyj, kort y blir ett kort üå blir eåoä blir äö blir ibland öu

Page 5: Spring 2.0

Skånska: Kort OrdlistaAaga, agde, agt åka, åkte, åktagebräda enkelt säteagerhuna nyckelpigaainor agnar, fröskal och annat överblivet vid tröskningajja non vara skyldig någon pengar (ja ajjor ingen!)ajjorna "det ägda området"akava [a`ka:va] plötsligt, härstammar troligen från spanskans

“acabo". (möjligen från latin?) Uttrycket “acabo de terminar", betyder “jag har nyss avslutat".

albuen armbågen jfr danskan!alika ['alika] kajaallfret titt och tätt, "esomoftast"alliera föra oväsen, väsnas "på riktigt"allo' oväsen, ~ed oväsendetalt forr ret förjämt, alltidansa repareraaoanlär ovanläder (på skor)aoast överstasa släpaaselen axeln lång, öppet "a"attes i går kvällauo av, i t ex auo-slan avslagen, men även som ensamt ord:"den har

gåd mitt auo", uttalas ibland “å"auoeded avätetauoeden färdigäten, klar med sin måltidauogauen avgången, bortgången, dödauvand avvänjdavengav öppning mellan två hus oftast med kraftigt drag vid blåstavuring yngling, ngt avvikande.. Kommer eg. från murarspråket, där

en avuring är en åttondels tegelsten. En fjärdedels sten kallas pittring eller pettring

Bbagetru baktrågbaghebba bakkappa på skobagposse bakre nätbehållaren på en ålahummabagvänd i t ex uttrycket: varra bagvänd bete sig avigtbala si vältra sigballna svälla, dra till sig vätskaballyad glosögd jfr. engelskt Ball-eyedbang räddbarfytt barfotabarhuad utan mössabasa ner söla nerbasa si me smutsa ner sig med, även: anstränga sig medbased nersöladbaske eller baska ris, kvistarbede betesmarkbede, et - en stund en omgångbedestickje betestycke, betesmarkbellulk snorvalpbigatt kalvsyltabladda utsmetat klägg, komocka, även verb, i betydelsen smeta utblaga klick, även spottloska, kan även användas som verbblesa verb blåsablians blyertsblar, i bestämd form blaren. Förekommer t ex i uttrycket: Pågen va en

liden blar. Eller i ordet pågablära. Blaren var namnet på ett av korten i det medeltida kortspelet Kille. Blaren var narren i kortspelet. Ordet är möjligen härlett från det slaviska ordet för narr eller dåre: "blázen" (tjeckiska).

blära subst. blåsa, t ex luftblåsa

bläreträ vattenpassblöd känslig, ömskinnadblöd mjuk (i bokstavlig betyd.)blöd perf.part. av "ble"=blivabobbe otrevlig typ, av tyskans Bube = knektbog, bööjer bok, böckerboglåda bokhandelbojjel, bojlar bygel, byglarbojsesilla byxhängslenbojsor byxorbojsor torsk-roms-säckar, dessa liknar "byxor", därav namnet!borred buritboss löshalmbra me... "tycke har uppstått..." "di e bra me dom..."braschet (ett västskånskt uttryck) kallt och ruggigtbrenntjessan trollet i brunnen (att skrämma barn med)brogemansvest brudgumsvästbränne vedbrännesnuda ibl. snudesö kraftig soppa på rimmat fläsk med rotsaker och

kål, ibland redd med korn el. havregrynbugagång festlek i samma dignitet som armbrytning, men där det i stället

gäller att mötas buk mot buk och knuffa omkull den andre med bara magen

bugastinn rejält mättbuged tjock, stormagadbumpa dunsa, skumpabust stor stark man "u" som i svenska "sjutton"butt stegby ti ämna att göra, försöka sig på (speciellt i negativa sammanhang)byck based blev nersölatbån snörebåsa ongan städabändelbann smalt tygband av t.ex. bomullbö, byck el. bick, böd bli, blev, blivitböjetre bokträbön siddanes! bli (bliven) sittande! eller sitt kvar! bön har formen imperativ

pluralbösa (substantiv) oväderbööst dåligt, om väder, i uttrycket di e bööst = det är dåligt väder (oväder).

Kommer från tyskans böse = illa, stygg, dålig

Ddann i t ex uttrycket: Akta så du ente bler skiti å dann! svåröversatt ord,

med ungefärlig betydelse: sådant, med mera, etceterade é ingen onger... det är inte konstigt, att...de riimer si det går snabbt....de va nock, di lätt kraftuttryck av förargelsedoja, dojde, dojt uthärda, lida "Detta ... har jag minne av att det för

Österlens del betydde något svåröversatt, men som betydde, att man satt och vilade med alla själsförmögenheter i viloläge, och kroppen rätt så utfluten i alla riktningar trots sittställningen var någorlunda upprätt." / Kurt Lasson

dor dorndraav "maskinbredd" (jordbruk) "omgång" när det gäller aga...drickablenning dryck blandad av mjölk och svagdrickadriva spettakel göra "practical jokes"dropperövad "med svansen mellan benen", sorti med nederlag!drya ge sig i väg, ofta motvilligt för annans vilja!dröutatru "trösketråg" för att skilja frö från skaldummla ti ta små tupplurardunnan åskanduppa vit sås, béchamel-typdyddjed dimmig, oklardårren vansinne i uttrycket “Di e ju rena dårren!"dölled dåligt

Eebblatre äppelträdeda ätaeje, ejen, ejorna ek, eken, ekarnaeletriker (ibland t o m med betoningen på “-tri-") elektrikerella ellerellas annarsena ensamenstia enstakaettedran långsintettehöstasnittjare (el. -snickare) snickare av tvivelaktig kvalitet, ett

epitet som kan användas om hantverkare som är självlärda och inte behärskar yrket. Säsongsarbetare förr i tiden, kunde ibland ta snickarjobb och liknande, efter det att höstningen (skörden) var avklarad. Därav detta uttryck.

etteliga, ettelija efter omständligheterna, "i jämförelse med"ettja resaettorhöst årstiden efter skördenevvja vidrig vätska eller ibland något mer trögflytande kläggexekyser konstiga, avvikande övningar...

Ffarledd mycket, väldigt, eg. farligt, troligen det vanligaste

förstärkningsordet i Österlenskanfelen, feled kusligt, "nästan tokig"filltjed halt, glatt underlag, ibland smutsigtfirre furfissjed ålfisketidenfittemada smörgås ursprung: grovt bröd med flott!fjåned fånigt,dumtfjär, fjära fjäder, fjädrarfjäringsvaj vägbit 2 1/2 kmflage skiva, platta, flak av t ex trä, se även valkeflageflanje, eller flänge öppet fält eller platsflased fräck i munflextra ivajj fara iväg utan förberedelseflinebojsa flinar åt det mestaflinemidda flinar åt det mestaflischa si åsta se till att komma ivägflua, fluor inte bara flugor, utan många andra liknande insekter!flude grädde jfr danskans "flöde"flunka flämta, blinkafly mi karen! ge mig tallrikarna!fly mi 'giv mig!'flåggra fladdraflänge se flanjeflätta ben gå med sirliga stegflättevännare el. plättevännare örfilfnall oväsen, oredafnurred oredafnusta pusta, hämta andanforr i varden förr i världen (tiden)forrfasa si baxna, förvånas på ett rysligt sättforrfudda (u som i mus) skarva till, t ex om en strumpa blivit

uppsliten på häl och tår, kan man repa upp garnet till ankeln. Därefter kan man sticka på en ny fot. Därav uttrycket. Uttrycket är dock användbart på helt andra saker.

forrgrysa si häpna, starkt undraforrhyring gosse (...tror jag i alla fall. Jag kan inte påminna mig om

att detta ord går att använda om småflickor)forrkaffad andtrutenforrkle förklädeforrsjell skillnad jfr danskans forskell!

Page 6: Spring 2.0

What is Spring?

Lightweight framework Not in number of classes... Lightweight = ”minimal impact” ”POJO container”, suitable for any application

An abstract layer for popular technologies JDBC Transaction AOP, ...

An alternative way of creating enterprise class applications

Page 7: Spring 2.0

What is Spring?

Encourages true component-based programming model POJO based programming Encourage Java interfaces everywhere Simplifies unit testing

Java EE integration Simplified support for many Java EE technologies EJB 3.0 just shows that the EJB API has been too complex

Web MVC framework Agnostic approach towards web MVC frameworks

Remoting Transform any POJO to a remote service Hessian, Burlap, Serialization

Page 8: Spring 2.0

Spring Core

Spring Context

Spring DAO

Spring ORM Spring Web Spring AOP

Spring Web MVC

Spring Overview

Page 9: Spring 2.0

Dependency Injection

ObjC IObj

ObjA ObjB ObjD

Page 10: Spring 2.0

Dependency Injection

ObjC IObj

ObjA ObjB ObjD

Factory

Page 11: Spring 2.0

Dependency Injection

ObjC IObj

ObjA ObjB ObjD

Application Context

Page 12: Spring 2.0

Dependency Injection

ObjC IObj

ObjA ObjB ObjD

Application Context

Application

Page 13: Spring 2.0

Dependency Injection Benefits

Unit testableDependencies are explicitConsistentCan wire up arbitrarily complicated graphsYou don’t need to write plumbing codePluggability Reduces cost of programming to interfaces

to zero

Page 14: Spring 2.0

Spring Core

Bean container Providing all instances of your application classes with

all dependencies they need Spring managed resources are called beans

Based on Dependency Injection (DI) Aka ”Inversion of Control” (IoC) Cater for all objects and their dependencies Reduces glue code

Source Level Attributes (annotations) Commons Attributes Java 5 annotations

Page 15: Spring 2.0

Spring Context

Extension to Spring Core ApplicationContext

JNDI EJB support Mail support

Remoting Burlap Hessian Serialization

Integration with template engines Velocity FreeMarker

Page 16: Spring 2.0

Sub Projects

Spring Security (Acegi) Per-method based security framework

Spring Web Flow State engine for web sites Captures logical page flows as self-contained modules

Spring Rich Client Base library for building Swing clients faster

Spring BeanDoc Generate documentation for Spring beans á la JavaDoc

Spring IDE for Eclipse Edit and validate Spring configuration files Visualize Spring bean graph

Page 17: Spring 2.0

New in Spring 2.0

XML-schema based configuration files Simplifies writing Spring configuration files Transaction, JNDI, AOP

JDBC named parameters in JdbcTemplates SELECT * FROM banks WHERE id = ? SELECT * FROM banks WHERE id = :bankId

Extended JMS support Message driven POJOs Full XA support in both J2EE and J2SE!

AspectJ support Uses AspectJ’s pointcut language Use AspectJ aspects in Spring

Page 18: Spring 2.0

New in Spring 2.0 cont’d

Java Persistance API (draft) support EJB 3.0

Portlet MVC framework

Spring MVC tag library

Java 5 annotation support AOP, JMX, ...

100% backwards compatible Still only requires Java 1.3 Though deprecated methods have been removed.

…and more

Page 19: Spring 2.0

Spring 2.0: Easy Configuration

<bean id="dataSource" class=“org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName" value="jdbc/StockData"/>

</bean>

<jndi:lookup id="dataSource" jndiName="jdbc/StockData"/>

Page 20: Spring 2.0

Spring 2.0: More Configurations

<jndi:lookup/> Access JNDI resources

<util:properties/> Load properties

<aop:*/> Simplified standard AOP configuration Support for AspectJ aspects

<tx:*/> Better transactional advice Enable annotation-driven transactions in a single line

Page 21: Spring 2.0

Standard JDBC Programmingpublic List getCustomers(int custType) { List result = new ArrayList(); Connection connection = null; PreparedStatement statement = null; ResultSet rs = null; try { connection = ds.getConnection(); statement = connection.prepareStatement( "select * from Customer where type = ?"); statement.setInt(1, classfication); rs = statement.executeQuery(); while (rs.next()) { Customer customer = new Customer(); customer.setId(rs.getInt("Id")); customer.setName(rs.getString("Name")); result.add(customer); } } catch (SQLException ex) { ex.printStackTrace(); } finally { closeResultSet(rs); closeStatement(statement); closeConnection(connection); } return result;}

Page 22: Spring 2.0

JdbcTemplate Programming

... public List getCustomers(int custType) { return new CustomerMappingQuery(ds).execute(custType); }}

private class CustomerMappingQuery extends MappingSqlQuery { public CustomerMappingQuery(DataSource ds) { super (ds, "select * from customer where type > :custType"); super.declareParameter(new SqlParameter("custType", Types.INTEGER)); compile(); }

public Object mapRow(ResultSet rs, int rowNumber) throws SQLException { Customer customer = new Customer(); customer.setId((Integer) rs.getObject("id")); customer.setName(rs.getString("name")); return cust; }}

Page 23: Spring 2.0

SimpleJdbcTemplate

Ease of useUses Java 5 autoboxing and varargs

simpleJdbcTemplate.queryForInt("SELECT COUNT(*) FROM CLIENT WHERE TYPE=? AND CURRENCY=?", 13, “SEK"

);

Page 24: Spring 2.0

Aspect Oriented Programming

Modularize pieces of logic and apply that to many parts of the application

Hot topic the last 18 month Used in production

Spring AOP has been successful Easy to understand and use Proxy based Ideal partner to IoC

Any bean can be adviced Used for security and transactions

Supports a declarative and programmaticconfiguration model

Page 25: Spring 2.0

Spring AOP Concepts

Aspect = Pointcut* + Advice

Pointcut = Joinpoint*

”Where” in

the execution

Code to insert

Page 26: Spring 2.0

Joinpoint

Well defined point during execution A call to a method Method invocation Class initialization Object instantiation

Used as ”hooks” for aspects

NameBean bean = new NameBean(); bean.foo();

Invocation Call

Object instantiation Class initialization

Page 27: Spring 2.0

Pointcut

Collection of joinpoints that defines where the advice should be applied

Example All methods named foo with any number of parameters

or named bar with parameter type int

execution(* foo(..)) or execution(* bar(int))

Page 28: Spring 2.0

Advice

The additional code you want to apply to your existing code (executed at a specific joinpoint)

Various types that defines when the advice should be executed Before After Around Throws ...

Example Log a method call

Page 29: Spring 2.0

Combination of advice and pointcutsDefines the code that should be included in the application and where it should be executed

Example Run code X before all methods in object Order that are

named save() or load()

Aspect

Advice Pointcut

Page 30: Spring 2.0

Weaving

The process of inserting the aspects to the application code (at the appropriate point)This is when the ”magic” happens...

Two types Compile time Runtime

Example Some AOP classloader in AspectWerkz The ajc compiler in AspectJ The ProxyFactory in Spring

Page 31: Spring 2.0

AOP in Spring 2.0

Based on dynamic AOP Proxy based Only method execution joinpoints are supported

Integrates AspectJ powerful pointcut expression language execution(* foo(..)) or execution(* bar())

Fully integrates AspectJ aspects

Page 32: Spring 2.0

Spring AOP vs AspectJ

Spring AOP well suited to Coarse grained application Enterprise services Working with Spring beans

AspectJ well suited to Fine grained application Aspect-oriented programming

In Spring 2.0 we can use them together...

Page 33: Spring 2.0

Aspect Example: The POJO

public class CustomerDAO {

private DataSource ds;

// Dependency injected by Spring

public void setDataSource(DataSource ds) {

this.ds = ds;

}

// TODO: Need to implement cache functionality!

public List getCustomers(int custType) {

return new CustomerMappingQuery(ds).execute(custType);

}

}

Page 34: Spring 2.0

Aspect Example: The Advice

public class CachingAdvice { private HashMap<CacheKey,Object> cachedValues = new HashMap<CacheKey,Object>();

public Object cache(ProceedingJoinPoint pjp) throws Throwable { CacheKey key = new CacheKey( pjp.getThis(), pjp.getSignature().getName(), pjp.getArgs());

Object value = cachedValues.get(key); if (value == null) { value = pjp.proceed(); cachedValues.put(key, value); }

return value; }}

Page 35: Spring 2.0

Aspect Example: The Composition

<beans xmlns="..." ...>

<aop:config> <aop:aspect ref="cacheAdvice"> <aop:advice kind="around" method="cache"

pointcut="execution(* *..CustomerDAO.getCustomer(int))"/> </aop:aspect> </aop:config>

<bean id="cacheAdvice" class="se.jayway.aop.CacheAdvice"/>

<bean id="customerDAO" class="se.jayway.aop.CustomerDAO"> <property id="dataSource" ref="myDS"/> </bean>

<bean id="myDS" class="org.apache.commons.dbcp.BasicDataSource"> ... </bean></beans>

Page 36: Spring 2.0

Summary

Spring framework has matured

Very broad From web MVC and rich clients to message driven POJOs

AOP changes the way we traditionally code Spring is the good example