{"id":4619,"date":"2018-06-16T15:39:13","date_gmt":"2018-06-16T10:09:13","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=4619"},"modified":"2018-06-16T15:39:13","modified_gmt":"2018-06-16T10:09:13","slug":"spring-vs-spring-boot","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/","title":{"rendered":"Spring Vs Spring Boot"},"content":{"rendered":"<p>What is Sprin<span style=\"font-size: 1rem;\">g Boot? What is Spring Framework? What are their goals? How can we compare them? There must be a lot of question in your mind. We will discuss each and every question here. At the end of blog you will get to know about all these questions. There is one interesting fact that you will get to know that they both are not\u00a0competing each other for specific point. Actually they both solves a different types of problem.<\/span><\/p>\n<h3><strong>What is Spring? Why we use Spring ? What are the core problem Spring solves?<\/strong><\/h3>\n<p>Spring Framework is one of the most popular application development frameworks for Java. One of the great feature that the spring have is <strong>Dependency Injection (DI)\u00a0<\/strong>or <strong>Inversion Of Control (IOC)\u00a0<\/strong>with the help of which we can develop loosely coupled applications. And loosely coupled applications can be easily unit tested.<\/p>\n<p>Let\u2019s consider a simple example:<\/p>\n<h3 id=\"example-without-dependency-injection\">Example without Dependency Injection<\/h3>\n<p>Consider the example below: MyController depends on MyService for certain task. SO, to get the instance of MyService , we will do like<\/p>\n<p><code class=\"highlighter-rouge\">MyService service = new MyService();<\/code>.<\/p>\n<p>we have now created the instance for MyService and we see both are tightly coupled. so, If I create an mock for MyService in a unit test for MyController, How do I make MyController use the mock? Its bit difficult. Isn&#8217;t it?<\/p>\n<pre class=\"lang:default decode:true\">@RestController\r\npublic class MyController {\r\n    private MyService service = new MyService();\r\n\r\n    @RequestMapping(\"\/welcome\")\r\n    public String welcome() {\r\n        return service.retrieveWelcomeMessage();\r\n    }\r\n}<\/pre>\n<h3><strong>Same example with DI<\/strong><\/h3>\n<p>With the help of only two annotations only we can get the instance of MyService soeasily which is not tightly coupled . The Spring Framework do the hard work to make things simpler.<\/p>\n<ul>\n<li>\u00a0<code>@Component<\/code>\u00a0is simply used to say\u00a0 Spring Framework that <em>this is a bean that you need to manage within your own BeanFactory (An implementation of Factory pattern).<\/em><\/li>\n<li><code>@Autowired<\/code>\u00a0is simply used to say Spring Framework to find the correct match for this specific type and autowire it in<\/li>\n<\/ul>\n<p>So, Spring framework will create a bean for MyService and autowire it into MyController.<\/p>\n<p>In a unit test, I can ask the Spring framework to auto-wire the mock ofMyService into MyController.<\/p>\n<pre class=\"lang:default decode:true\">@Component\r\npublic class MyService {\r\n    public String retrieveWelcomeMessage(){\r\n       return \"Welcome to InnovationM\";\r\n    }\r\n}<\/pre>\n<pre class=\"lang:default decode:true\">@RestController\r\npublic class MyController {\r\n\r\n    @Autowired\r\n    private MyService service;\r\n\r\n    @RequestMapping(\"\/welcome\")\r\n    public String welcome() {\r\n        return service.retrieveWelcomeMessage();\r\n    }\r\n}<\/pre>\n<p>Spring Framework has many other features, which are divided into twenty modules to solve many such common problems. Few of them are:<\/p>\n<ul>\n<li>Spring JDBC<\/li>\n<li>Spring MVC<\/li>\n<li>Spring AOP<\/li>\n<li>Spring ORM<\/li>\n<li>Spring JMS<\/li>\n<li>Spring Test<\/li>\n<li>Spring Expression Language (SpEL)<\/li>\n<\/ul>\n<p>Aspect Oriented\u00a0Programming(AOP) is another strong side of Spring Framework.\u00a0The key unit\u00a0 in\u00a0Object Oriented Programming is the <strong>class<\/strong>, whereas in AOP the key unit is the <strong>aspect<\/strong>. for example : if you want to add the security in your project , logging etc etc , you can just use AOP and keep these cross cutting concern away from your main business logic. You can perform any action after a method call , before a method call, after a method returns , after the exception arises.<\/p>\n<p>Spring Framework does not have its own ORM but it provides a very good integration with ORM like Hibernate ,\u00a0Apache iBATIS etc.<\/p>\n<p>In short we can say that ,Spring Framework provides decoupled way of developing web applications. Web applications development becomes easy with help of these concepts in spring like Dispatcher Servlet, ModelAndView and View Resolver.<\/p>\n<h3><strong>Then there must a question arising in your mind , if spring sort out so many problem , then why there is the need of Spring boot?<\/strong><\/h3>\n<p>Now , if you have already worked on Spring , think about the problem\u00a0that you faced while developing full-fledged spring application with all functionalities.Not able to think? ok let me tell you, There was lot of difficulty to\u00a0setup hibernate Datasource, Entity Manager, Session Factory, Transaction Management etc? It takes a lot of time for a developer to set up a basic project using spring MVC with minimum functionality.<\/p>\n<pre class=\"lang:default decode:true\">  &lt;bean\r\n        class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"&gt;\r\n        &lt;property name=\"prefix\"&gt;\r\n            &lt;value&gt;\/WEB-INF\/views\/&lt;\/value&gt;\r\n        &lt;\/property&gt;\r\n        &lt;property name=\"suffix\"&gt;\r\n            &lt;value&gt;.jsp&lt;\/value&gt;\r\n        &lt;\/property&gt;\r\n  &lt;\/bean&gt;\r\n  &lt;mvc:resources mapping=\"\/webjars\/**\" location=\"\/webjars\/\"\/&gt;<\/pre>\n<pre class=\"lang:default decode:true\">&lt;servlet&gt;\r\n        &lt;servlet-name&gt;dispatcher&lt;\/servlet-name&gt;\r\n        &lt;servlet-class&gt;\r\n            org.springframework.web.servlet.DispatcherServlet\r\n        &lt;\/servlet-class&gt;\r\n        &lt;init-param&gt;\r\n            &lt;param-name&gt;contextConfigLocation&lt;\/param-name&gt;\r\n            &lt;param-value&gt;\/WEB-INF\/my-servlet.xml&lt;\/param-value&gt;\r\n        &lt;\/init-param&gt;\r\n        &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt;\r\n    &lt;\/servlet&gt;\r\n    &lt;servlet-mapping&gt;\r\n        &lt;servlet-name&gt;dispatcher&lt;\/servlet-name&gt;\r\n        &lt;url-pattern&gt;\/&lt;\/url-pattern&gt;\r\n    &lt;\/servlet-mapping&gt;<\/pre>\n<p><strong>When we use Hibernate, we have to configure these things like datasource , EntityManager etc<\/strong><\/p>\n<pre class=\"lang:default decode:true\">&lt;bean id=\"dataSource\" class=\"com.mchange.v2.c3p0.ComboPooledDataSource\"\r\n        destroy-method=\"close\"&gt;\r\n        &lt;property name=\"driverClass\" value=\"${db.driver}\" \/&gt;\r\n        &lt;property name=\"jdbcUrl\" value=\"${db.url}\" \/&gt;\r\n        &lt;property name=\"user\" value=\"${db.username}\" \/&gt;\r\n        &lt;property name=\"password\" value=\"${db.password}\" \/&gt;\r\n    &lt;\/bean&gt;\r\n    &lt;jdbc:initialize-database data-source=\"dataSource\"&gt;\r\n        &lt;jdbc:script location=\"classpath:config\/schema.sql\" \/&gt;\r\n        &lt;jdbc:script location=\"classpath:config\/data.sql\" \/&gt;\r\n    &lt;\/jdbc:initialize-database&gt;\r\n    &lt;bean\r\n        class=\"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean\"\r\n        id=\"entityManagerFactory\"&gt;\r\n        &lt;property name=\"persistenceUnitName\" value=\"hsql_pu\" \/&gt;\r\n        &lt;property name=\"dataSource\" ref=\"dataSource\" \/&gt;\r\n    &lt;\/bean&gt;\r\n    &lt;bean id=\"transactionManager\" class=\"org.springframework.orm.jpa.JpaTransactionManager\"&gt;\r\n        &lt;property name=\"entityManagerFactory\" ref=\"entityManagerFactory\" \/&gt;\r\n        &lt;property name=\"dataSource\" ref=\"dataSource\" \/&gt;\r\n    &lt;\/bean&gt;\r\n    &lt;tx:annotation-driven transaction-manager=\"transactionManager\"\/&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h3><strong>How Spring Boot Solves the Above\u00a0Problem?<\/strong><\/h3>\n<ol>\n<li>Spring boot does\u00a0all of those using\u00a0<code>AutoConfiguration<\/code>\u00a0and will take care of all the internal dependencies that your application needs what you just need to do is just run your application. Spring boot will auto-configure with Dispatcher Servlet if Spring jar is in class path. It will auto-configue to datasource if hibernate jar is in class path. SpringBoot gives us a pre-configured set of Starter Projects to be added as a dependency in our project.<\/li>\n<li>During web-application development,\u00a0 we would need the jars we want to use, which versions of jars to use and how to connect them together. <span style=\"font-size: 1rem;\">All web application have similar needs.\u00a0 For example- Spring MVC, Jackson Databind , Hibernate core and Log4j (for logging). So, we had to choose the compatible versions of all these jars.\u00a0In order to decrease the complexity , spring boot has introduced what we call <strong>Spring boot Starters<\/strong><\/span><\/li>\n<\/ol>\n<h3 id=\"dependency-for-spring-boot-starter-web\">Dependency for Spring Web Project<\/h3>\n<pre class=\"lang:default decode:true\">&lt;dependency&gt;\r\n   &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n   &lt;artifactId&gt;spring-webmvc&lt;\/artifactId&gt;\r\n   &lt;version&gt;4.2.2.RELEASE&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;dependency&gt;\r\n    &lt;groupId&gt;com.fasterxml.jackson.core&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;jackson-databind&lt;\/artifactId&gt;\r\n    &lt;version&gt;2.5.3&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;dependency&gt;\r\n    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;hibernate-validator&lt;\/artifactId&gt;\r\n    &lt;version&gt;5.0.2.Final&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;dependency&gt;\r\n    &lt;groupId&gt;log4j&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;log4j&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.2.17&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p><em style=\"font-size: 1rem;\"><strong>Starters<\/strong> are set of convenient dependencies that you can include in your spring boot application.\u00a0 For using spring and hibernate we just have to include the spring-boot-starter-data-jpa dependency in the project.<\/em><\/p>\n<h3 id=\"dependency-for-spring-boot-starter-web\">Dependency for Spring Boot Starter Web<\/h3>\n<pre class=\"lang:default decode:true\">&lt;dependency&gt;\r\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>The following screenshot shows the different packages under a single dependency that are added into our application.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-4771\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/springboot.jpg\" alt=\"\" width=\"545\" height=\"578\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/springboot.jpg 545w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/springboot-283x300.jpg 283w\" sizes=\"(max-width: 545px) 100vw, 545px\" \/><\/p>\n<p>There are other more packages you will see , once you will add that starter dependency. Spring Boot Starter Web comes pre-packaged with these all. As a developer, we would not need to worry about these dependencies and their compatible versions.<\/p>\n<h3 id=\"spring-boot-starter-project-options\">Spring Boot Starter Project Options<\/h3>\n<p>These are few starter projects help us in quickly getting started with developing specific types of applications.<\/p>\n<ul>\n<li>spring-boot-starter-web-services: SOAP Web Services<\/li>\n<li>spring-boot-starter-web: Web and RESTful applications<\/li>\n<li>spring-boot-starter-test: Unit testing and Integration Testing<\/li>\n<li>spring-boot-starter-jdbc:\u00a0Traditional JDBC<\/li>\n<li>spring-boot-starter-hateoas:\u00a0Add HATEOAS features to your services<\/li>\n<li>spring-boot-starter-security: Authentication and Authorization using Spring Security<\/li>\n<li>spring-boot-starter-data-jpa: Spring Data JPA with Hibernate<\/li>\n<li>spring-boot-starter-cache: Enabling Spring Framework\u2019s caching support<\/li>\n<li>spring-boot-starter-data-rest: Expose Simple REST Services using Spring Data REST<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>What is Spring Boot? What is Spring Framework? What are their goals? How can we compare them? There must be a lot of question in your mind. We will discuss each and every question here. At the end of blog you will get to know about all these questions. There is one interesting fact that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[256,102],"tags":[224,243,279,280],"class_list":["post-4619","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-application","category-web-service","tag-java","tag-spring","tag-spring-boot","tag-web-application"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Vs Spring Boot - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Vs Spring Boot - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"What is Spring Boot? What is Spring Framework? What are their goals? How can we compare them? There must be a lot of question in your mind. We will discuss each and every question here. At the end of blog you will get to know about all these questions. There is one interesting fact that [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-16T10:09:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png\" \/>\n\t<meta property=\"og:image:width\" content=\"805\" \/>\n\t<meta property=\"og:image:height\" content=\"417\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Spring Vs Spring Boot\",\"datePublished\":\"2018-06-16T10:09:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/\"},\"wordCount\":952,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Spring-vs-spring-boot.png\",\"keywords\":[\"java\",\"Spring\",\"Spring Boot\",\"Web Application\"],\"articleSection\":[\"Java Application\",\"Web service\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/\",\"name\":\"Spring Vs Spring Boot - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Spring-vs-spring-boot.png\",\"datePublished\":\"2018-06-16T10:09:13+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Spring-vs-spring-boot.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/Spring-vs-spring-boot.png\",\"width\":805,\"height\":417},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-vs-spring-boot\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Vs Spring Boot\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Vs Spring Boot - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/","og_locale":"en_US","og_type":"article","og_title":"Spring Vs Spring Boot - InnovationM - Blog","og_description":"What is Spring Boot? What is Spring Framework? What are their goals? How can we compare them? There must be a lot of question in your mind. We will discuss each and every question here. At the end of blog you will get to know about all these questions. There is one interesting fact that [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/","og_site_name":"InnovationM - Blog","article_published_time":"2018-06-16T10:09:13+00:00","og_image":[{"width":805,"height":417,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Spring Vs Spring Boot","datePublished":"2018-06-16T10:09:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/"},"wordCount":952,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png","keywords":["java","Spring","Spring Boot","Web Application"],"articleSection":["Java Application","Web service"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/","url":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/","name":"Spring Vs Spring Boot - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png","datePublished":"2018-06-16T10:09:13+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2018\/06\/Spring-vs-spring-boot.png","width":805,"height":417},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/spring-vs-spring-boot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Vs Spring Boot"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/4619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=4619"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/4619\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/4777"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=4619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=4619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=4619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}