FD 2016 INSEA Chapitre 6 - benelallam.org · La réponse Spring ! qEn rupture avec les conteneurs...

41
Spring framwork Ref :[M. Youssfi]

Transcript of FD 2016 INSEA Chapitre 6 - benelallam.org · La réponse Spring ! qEn rupture avec les conteneurs...

Spring framwork

Ref :[M.Youssfi]

Rappeldel’architecture logicielledesAppsJEE • Lacouche [dao]s'occupede l'accès auxdonnées, le

plussouventdesdonnéespersistantesauseind'unSGBD.

• Lacouche [métier]implémente lestraitements«métier»de l'application. Cettecoucheestindépendante detoute formed'interfaceavecl'utilisateur.• C'estgénéralement lacouche laplusstablede

l'architecture.• Lacouche [Web]quireprésente lapartiecontrôle

quiorchestre lesaccèsàl’application ainsique lesinterfaces (graphiquessouvent)quipermetàl'utilisateur depiloter l'application etd'enrecevoirdesrésultats.

Problématiques de développement JEE

q JEEn’encouragepasunebonneséparationdespréoccupations(isolationdesdifférentesproblématiquesqu’uneapplicationdoitgérer).

q JEEestuneplate-formecomplexeàmaîtriser,quiposedesproblèmesdeproductivité.

q JEEimposeuneplate-formed’exécutionlourde,quiposedesproblèmesd’interopérabilitéentredifférentesimplémentations.

La réponse Spring !

qEnruptureaveclesconteneursJEE,disqualifiéspardenombreuxexpertspourleurlourdeur,sontapparusdesconteneursditslégers.

q Leframework Spring entredanscettecatégoriedesolutions.q CecœuraétéétendudemanièreàsupporterlaPOA(programmationorientéeaspect),ouAOP(AspectOrientedProgramming),unnouveauparadigmedeprogrammationpermettantd’allerau-delàdel’approcheobjetentermedemodularisationdescomposants.

Présentation de Spring

qSPRINGesteffectivementunconteneurdit«léger»,c’est-à-direuneinfrastructuresimilaireàunserveurd’applicationJEE.

q Ilprendenchargelacréationd’objetsetlamiseenrelationd’objetsparl’intermédiaired’unfichierdeconfigurationquidécritlesobjetsàfabriqueretlesrelationsdedépendancesentrecesobjets.

q Legrosavantageparrapportauxserveursd’applicationestqu’avecSPRING,vosclassesn’ontpasbesoind’implémenterunequelconqueinterfacepourêtreprisesenchargeparleframework (aucontrairedesserveursd’applicationsJEEetdesEJBs).

q C’estencesensqueSPRINGestqualifiédeconteneur«léger».

Présentation de Spring

qOutrecetteespècedesuperfabriqued’objets,SPRINGproposetoutunensembled’abstractionspermettantdegérerentreautres:

• Lemodetransactionnel.• L’appeld’EJBs.• Lacréationd’EJBs.• Lapersistanced’objets• Lacréationd’uneinterfaceWeb.• L’appeletlacréationdeWebServices.

q Pourréalisertoutceci,SPRINGs’appuiesurlesprincipesdudesignpatternIoC etsurlaprogrammationparaspects(AOP).

Les modules de SpringCommenouspouvonslevoir,Spring reposesurunsocle technique constituédesmodules :

•Spring Core,leconteneur léger ;•Spring AOP,leframework dePOA.

Les patrons de conception

q Enanglais,onparledeDesignPattern.q Spring reposesurdesconceptséprouvés,patronsdeconceptionetparadigmes,dontlesplusconnussont• IoC (InversionofControl),• lepatron« fabrique »• lesingleton,• laprogrammationorientéeAspect,• ouencorelemodèledeprogrammationdit"partemplate".

q Cesconceptsn’étantpaspropreàSpring,ilss’appliquentégalementàd’autresframeworks.

Couplagefort

• QuanduneclasseAestliéàuneclasseB,onditquelaclasseAestfortementcoupléeàlaclasseB.• LaclasseAnepeutfonctionnerqu’enprésencedelaclasseB.• SiunenouvelleversiondelaclasseB(soitB2),estcrée,onestobligédemodifierdanslaclasseA.• Modifieruneclasseimplique:

• Ilfautdisposerducodesource.• Ilfautrecompiler,déployeretdistribuerlanouvelleapplicationauxclients.Cequiengendredesproblèmesdelamaintenancedel’application

Couplagefort:exemple

Decefaitnousavonsviolé leprincipe «uneapplication doitêtre ferméeàlamodification etouverteàl’exetension»

Couplagefaible

• Pourutiliserlecouplagefaible,nousdevonsutiliserlesinterfaces.• ConsidéronsuneclasseAquiimplémenteuneinterfaceIA,etuneclasseBquiimplémenteuneinterfaceIB.• SilaclasseAestliéeàl’interfaceIBparuneassociation,onditqueleclasseAetlaclasseBsontliéesparuncouplagefaible.• CelasignifiequelaclasseBpeutfonctionneravecn’importequelleclassequiimplémentel’interfaceIA.• EneffetlaclasseBneconnaitquel’interfaceIA.Decefaitn’importequelleclasseimplémentantcetteinterfacepeutêtreassociéeàlaclasseB,sansqu’ilsoitnécessairedemodifierquoiquesesoitdanslaclasseB.• Aveclecouplagefaible,nouspourronscréerdesapplicationferméeàlamodificationetouvertesàl’extension.

Couplagefaible:exemple

InjectiondesdépendancesavecSpring

• L’injectiondesdépendance,oul’inversiondecontrôleestunconceptquiintervientgénéralementaudébutdel’exécutiondel’application.• Spring IOCcommenceparlireunfichierXMLquidéclarequellessontdifférentesclassesàinstancieretd’assurerlesdépendancesentrelesdifférentesinstances.• Quandonabesoind’intégrerunenouvelleimplémentationàuneapplication,ilsuffiraitdeladéclarerdanslefichierxml debeansspring.

Injectiondesdépendancesdansuneapplication javastandard

Injectiondesdépendancesdansuneapplication javastandardpackagepres;importmetier.IMetier;

importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.FileSystemXmlApplicationContext;publicclassPresentation {

publicstatic void main(String[]args){ApplicationContext appContext =new

FileSystemXmlApplicationContext("AppContext.xml");IMetier m=(IMetier)appContext.getBean("metier");System.out.println(m.calcul());

}}

Injectiondesdépendancesdansuneapplicationweb

Spring MVC

MCV1

ProblèmeduMVC1

MVC2

MVC2

Spring MVC

Application