SpringFrameworkCookbook i Spring Framework Cookbook SpringFrameworkCookbook ii Contents 1 SpringFrameworkBestPractices 1 1.1 Definesingletonbeanswithnamessameastheirclassorinterfacenames . . . . . . . . . . . . . . . . . . . . . 1 1.2 PlaceSpringbeanconfigurationfilesunderafolderinsteadofrootfolder . . . . . . . . . . . . . . . . . . . . . 1 1.3 GivecommonprefixesorsuffixestoSpringbeanconfigurationfiles . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 AvoidusingimportelementswithinSpringXMLconfigurationfilesasmuchaspossible . . . . . . . . . . . . . 2 1.5 StayawayfromautowiringinXMLbasedbeanconfigurations . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.6 Alwaysexternalizebeanpropertyvalueswithpropertyplaceholders . . . . . . . . . . . . . . . . . . . . . . . . 3 1.7 Selectdefaultversion-lessXSDwhenimportingnamespacedefinitions. . . . . . . . . . . . . . . . . . . . . . . 3 1.8 Alwaysplaceclasspathprefixinresourcepaths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.9 Createasettermethodeventhoughyouusefieldlevelautowiring . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.10 Createaseparateservicelayereventhoughservicemethodsbarelydelegatetheirresponsibilitiestocorrespond- ingDAOmethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.11 Usestereotypeannotationsasmuchaspossiblewhenemployingannotationdrivenbeanconfiguration . . . . . . 5 1.12 GrouphandlermethodsaccordingtorelatedscenariosindifferentControllerbeans . . . . . . . . . . . . . . . . 6 1.13 Placeannotationsoverconcreteclassesandtheirmethodsinsteadoftheirinterfaces . . . . . . . . . . . . . . . . 6 1.14 Preferthrowingruntimeexceptionsinsteadofcheckedexceptionsfromservicelayer . . . . . . . . . . . . . . . 6 1.15 Managetransactionsonlyintheservicelayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.16 MarktransactionsasreadOnly=truewhenservicemethodsonlycontainqueries . . . . . . . . . . . . . . . . . . 7 1.17 BeawareoffalsepositivesintransactionalORMintegrationtests . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.18 DonotuseDriverManagerDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.19 EitheruseNamedParameterJdbcTemplateorJdbcTemplateforyourJDBCoperations . . . . . . . . . . . . . . . 9 1.20 UseSessionFactoryandEntityManagerdirectlyinyourDAObeans . . . . . . . . . . . . . . . . . . . . . . . . 9 1.21 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Spring4AutowireExample 11 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 UsageofAutowire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 StepbyStepImplementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.1 CreatetheApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.2 ConfigurePOM.xml(maven) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 SpringFrameworkCookbook iii 2.3.3 CreateServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.4 Configurebeans(applicationContext.xml) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.5 Createtheclassthatwilluse(injection)theservice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.6 TestitOut! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4 DownloadtheEclipseprojectofthistutorial: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 HowtowriteTransactionalUnitTestswithSpring 16 3.1 CreateanewMavenProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 Addnecessarydependenciesinyourproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 Createlog4j.xmlfileinyourproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4 PrepareDDLandDMLscriptstoinitializedatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.5 WriteDomainClass,ServiceandDAOBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.6 ConfigureSpringApplicationContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7 Writeatransactionalintegrationunittest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.8 Runthetestsandobservetheresults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.10 DownloadtheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4 SpringFrameworkJMSTemplateExample 32 4.1 Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2 SendingandReceivingMessageswithoutJmsTemplate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.3 ConfiguringJmsTemplate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.4 UsingJMSTemplatetoproducemessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.5 UsingJMSTemplatetoconsumemessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.6 CompleteJmsTemplateexampletosend/receivemessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.7 JmsTemplatewithDefaultdestination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.8 JmsTemplatewithMessageConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.9 ConfiguringMessageConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.10 DownloadtheEclipseProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5 HowtoStartDevelopingLayeredWebApplicationswithSpring 46 5.1 CreateanewMavenWebAppproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.2 Addnecessarydependenciesinyourproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.3 Createlog4j.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.4 PrepareDDLandDMLscriptstoinitializedatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.4.1 schema.sql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.4.2 data.sql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.5 WriteDomainClass,ServiceandDAOClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.5.1 Person.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.5.2 PersonDao.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 SpringFrameworkCookbook iv 5.5.3 JdbcPersonDao.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.5.4 PersonService.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.5.5 PersonServiceImpl.java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.6 WriteControllerClassesandJSPstohandleUIlogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.6.1 PersonListControllerandpersonList.jsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.6.2 PersonCreateControllerandpersonCreate.jsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.6.3 PersonUpdateControllerandpersonUpdate.jsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.6.4 PersonDeleteControllerandpersonDelete.jsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.7 ConfigureyourwebapplicationtobootstrapwithSpring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.7.1 WebAppConfig.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.7.2 WebAppInitializer.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.8 ConfigureyourIDEtorunTomcatinstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.9 RunTomcatinstanceandaccessyourwebappthroughyourbrowser . . . . . . . . . . . . . . . . . . . . . . . . 74 5.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.11 DownloadtheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6 AngularjsandSpringIntegrationTutorial 76 6.1 WhatisSpring? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.2 WhatIsAngular? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.3 CreateaNewProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.3.1 Mavendependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.2 Webappjava-basedconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.3.3 SpringMVCcontrollerandjsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.3.4 Angularjscontrollersandjsfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.3.5 Buildandruntheapplicationontomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.4 Downloadthesourcecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7 SpringMVCApplicationwithSpringSecurityExample 84 7.1 IntroductiontoSpringSecurity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.2 ProjectSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.3 ProjectImplementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.4 DownloadtheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 8 SpringMVCHibernateTutorial 94 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 8.2 Environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 8.3 SpringMVCFramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 8.4 HibernateForModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8.5.1 MavenProjectandPOMdependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 SpringFrameworkCookbook v 8.5.2 ConfigureHibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 8.5.3 DomainEntityClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 8.5.4 ServiceLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 8.5.5 DAOLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 8.5.6 ConfigureSpringMVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.5.7 InitializerClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.5.8 ApplicationController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.5.9 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8.5.10 Deployandrunningtheapp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.6 Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 8.7 RelatedArticles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 9 Springresttemplateexample 115 9.1 DownloadtheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 10 Springdatatutorialforbeginners 119 10.1 Output: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 10.2 DownloadtheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 11 SpringBatchTaskletExample 127 11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.2 SpringBatchFramework: KeyConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.2.1 Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 11.2.2 Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 11.2.2.1 ItemReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 11.2.2.2 ItemProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 11.2.2.3 ItemWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 11.2.2.4 ChunkProcessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 11.2.2.5 TaskletStepProcessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 11.2.3 TaskletExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 11.2.3.1 Toolsused . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 11.2.3.2 CreateaMavenProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 11.2.3.3 AddDependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 11.2.3.4 Adddb2*jars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 11.2.3.5 HSQLTableCreation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 11.2.3.6 SupplySampleData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 11.2.3.7 DataModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 11.2.3.8 RowMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 11.2.3.9 Tasklet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 11.2.3.10 JobConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 SpringFrameworkCookbook vi 11.2.3.11 ContextConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 11.2.3.12 PropertiesFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 11.2.3.13 RuntheApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 11.2.3.14 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 11.2.4 DownloadExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 12 SpringBootTutorialforbeginners 144 12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 12.2 Environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 12.3 SampleApplicationusingSpringBoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 12.3.1 CreateandconfigureaGradleprojectinEclipseIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 12.3.2 build.gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 12.3.2.1 Modifybuild.gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 12.3.2.2 Walkthroughbuild.gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 12.3.2.3 Runinitialbuild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 12.3.3 CreateSampleApplication.java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 12.3.4 CreateSampleController.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 12.3.5 SampleApplication.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 12.3.5.1 ModifySampleApplication.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 12.3.6 RunSampleApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 12.4 References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 12.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 12.6 DownloadtheEclipseproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 13 SpringSessionTutorial 166 13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 13.2 ProjectSet-Up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 13.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 13.3.1 StickySession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 13.3.2 SingleSignOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 13.4 DownloadTheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 14 SpringWebFlowTutoriall 178 14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 14.2 ProjectSet-Up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 14.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 14.4 DownloadTheSourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 SpringFrameworkCookbook vii Copyright (c) Exelixis Media P.C., 2017 All rights reserved. Without limiting the rights under copyright reserved above, no part of this publication may be reproduced, stored or introduced into a retrieval system, or transmitted, in any form or by any means (electronic, mechanical, photocopying, recording or otherwise), without the prior written permission of the copyright owner. SpringFrameworkCookbook viii Preface TheSpringFrameworkisanopen-sourceapplicationframeworkandinversionofcontrolcontainerfortheJavaplatform. The framework’s core features can be used by any Java application, but there are extensions for building web applications on top oftheJavaEEplatform. Althoughtheframeworkdoesnotimposeanyspecificprogrammingmodel,ithasbecomepopularin the Java community as an alternative to, replacement for, or even addition to the Enterprise JavaBeans (EJB) model. (Source: https://en.wikipedia.org/wiki/Spring_Framework). Springhelpsdevelopmentteamseverywherebuildsimple,portable,fastandflexibleJVM-basedsystemsandapplications. The project’smissionistohelpdevelopersbuildabetterEnterprise. (Source: https://spring.io/) In this ebook, we provide a compilation of Spring Framework tutorials that will help you kick-start your own programming projects. Wecoverawiderangeoftopics,frombasicusageandbestpractices,tospecificprojectslikeBootandBatch. Withour straightforwardtutorials,youwillbeabletogetyourownprojectsupandrunninginminimumtime. SpringFrameworkCookbook ix About the Author JCGs(JavaCodeGeeks)isanindependentonlinecommunityfocusedoncreatingtheultimateJavatoJavadevelopersresource center;targetedatthetechnicalarchitect,technicalteamlead(seniordeveloper),projectmanagerandjuniordevelopersalike. JCGsservetheJava,SOA,AgileandTelecomcommunitieswithdailynewswrittenbydomainexperts,articles,tutorials,reviews, announcements,codesnippetsandopensourceprojects. Youcanfindthemonlineathttps://www.javacodegeeks.com/