Date post: | 29-Jun-2015 |
Category: |
Technology |
Upload: | bjoern-granvik |
View: | 121 times |
Download: | 0 times |
Spring 2.0News and code
Björn Granvik, CTO Jayway
Agenda
What is Spring?
New in Spring 2.0
Aspect Oriented Programming
Summary
Skånska: R
[:R]
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
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!
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
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
Spring Core
Spring Context
Spring DAO
Spring ORM Spring Web Spring AOP
Spring Web MVC
Spring Overview
Dependency Injection
ObjC IObj
ObjA ObjB ObjD
Dependency Injection
ObjC IObj
ObjA ObjB ObjD
Factory
Dependency Injection
ObjC IObj
ObjA ObjB ObjD
Application Context
Dependency Injection
ObjC IObj
ObjA ObjB ObjD
Application Context
Application
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
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
Spring Context
Extension to Spring Core ApplicationContext
JNDI EJB support Mail support
Remoting Burlap Hessian Serialization
Integration with template engines Velocity FreeMarker
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
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
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
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"/>
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
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;}
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; }}
SimpleJdbcTemplate
Ease of useUses Java 5 autoboxing and varargs
simpleJdbcTemplate.queryForInt("SELECT COUNT(*) FROM CLIENT WHERE TYPE=? AND CURRENCY=?", 13, “SEK"
);
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
Spring AOP Concepts
Aspect = Pointcut* + Advice
Pointcut = Joinpoint*
”Where” in
the execution
Code to insert
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
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))
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
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
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
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
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...
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);
}
}
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; }}
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>
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