Expert One-on-One J2EE Design and Development is a 2002 book written by Rod Johnson. This book, published by Wrox, covered the state of Java enterprise application development at the time and highlighted a number of significant flaws with Java EE and the EJB component framework. In the book, he suggested a solution based on POJO (plain old Java objects) and dependency injection. The following is a book excerpt.
Inversion of control is illustrated by the centralization of workflow logic within the abstract superclass. In contrast to conventional class libraries, where user code invokes library code, this approach invokes user code via framework code in the superclass. It is also known as the Hollywood principle. Inversion of control is fundamental to frameworks, which typically rely heavily on the Template Method pattern (we will discuss frameworks later).
In the book, he demonstrated how to create a scalable, high-quality online seat reservation application without EJB. He wrote over 30,000 lines of infrastructure code for the application! It included several reusable Java interfaces and classes, including ApplicationContext and BeanFactory. He named the root package of the classes com.interface21 because Java interfaces were the fundamental building blocks of dependency injection. As Rod later explained, the number 21 in the band's name is a reference to the 21st century!
Individual J2EE Design and Development was an instantaneous success. A large portion of the infrastructure code provided for free as part of the book was highly reusable, and developers began incorporating it into their projects almost immediately. The book's source code and corrections were available on Wrox's website. They also provided a forum for the book online. Intriguingly, even 15 years after its publication, this book and its underlying principles remain applicable to the development of high-quality Java web applications. I strongly suggest you acquire a copy for your collection!
Shortly after the publication of the book, Juergen Hoeller and Yann Caroff persuaded Rod Johnson to create an open source project based on the infrastructure code. Rod, Juergen, and Yann began working together on the project in February 2003. The term "spring" was coined by Yann for the new framework. Rod believed that spring marked a new beginning after the "winter" of traditional J2EE! Here is a January 2003 excerpt from Yann Caroff's review of Rod's book!
Spring 0.9 was released in June 2003 under the Apache 2.0 license. Spring 1.0 was released in March 2004. Even before the release of version 1.0, spring was widely adopted by developers. interface21 was co-founded in August 2004 by Rod Johnson, Juergen Hoeller, Keith Donald, and Colin Sampaleanu. The company specializes in spring consulting, training, and support.
Early on, Yann Caroff departed the team. 2012 marked the departure of Rod Johnson from the spring squad. Juergen Hoeller remains a member of the spring development team.
Since its 1.0 release in 2004, Spring framework has undergone rapid development. Spring 2.0 was released in October 2006, and by that time, the number of Spring downloads had surpassed one million. Spring 2.0 featured extensible XML configuration, which simplified XML configuration, support for Java 5, additional IoC container extension points, support for dynamic languages like Groovy, aop enhancements, and new bean scopes.
November 2007 saw the rebranding of the Interface21 company that, under Rod's direction, managed spring projects to SpringSource. Concurrently, Spring 2.5 was released. Support for Java 6/Java EE 5, support for annotation configuration, component auto-detection in the classpath, and OSGi-compliant bundles were among the most important new features introduced in spring 2.5.
In 2007, SpringSource secured series A financing from benchmark capital in the amount of $10 million. In 2008, SpringSource secured additional funding from accel partners and benchmark through series B funding. During this timeframe, SpringSource acquires a number of businesses (Covalent, Hyperic, G2One etc.). In August 2009, VMWare acquired SpringSource for $420 million! SpringSource quickly acquired cloud foundry, a cloud PaaS provider. In 2015, cloud foundry was transferred to the cloud foundry foundation, a non-profit organization.
In December 2009, spring 3.0 became available. Spring 3.0 featured a reorganized module system, support for the spring expression language, java-based bean configuration (JavaConfig), support for embedded databases including HSQL, H2 and Derby, model validation/REST support, and support for Java EE 6.
2011 and 2012 saw the release of a number of minor versions of the 3.x series. Rod Johnson resigned from the spring team in July 2012. VMware and EMC establish Pivotal, a joint venture, in April 2013 with investment from GE. All spring application development projects were migrated to Pivotal.
Pivotal announced the release of spring framework version 4.0 in December 2013. Spring 4.0 was a major advancement for the spring framework and included features such as full support for Java 8, higher third party library dependencies (groovy 1.8+, ehcache 2.1+, hibernate 3.6+ etc.), Java EE 7 support, groovy DSL for bean definitions, support for websockets, and support for generic types as a qualifier for injecting beans.
From 2014 to 2017, several spring framework 4.x.x releases were released. March 2017 saw the release of Spring Framework version 4.3.7. Spring framework 4.3.8 is expected to be released in April 2017; it will be the final version in the 4.x series.
Spring 5.0 is the upcoming major release of the spring framework. It is scheduled to be released in the fourth quarter of 2017. This may change, however, as it is dependent on the JDK 9 release.
Mike Youngstrom created a feature request in spring jira in October 2012 requesting support for containerless web application architectures in the spring framework. He discussed configuring web container services within a spring container using the primary method! Here is a portion of the jira request:
This request resulted in the beginning of the spring boot project development in early 2013. Spring boot 1.0.0 was released in April 2014. Since then, a variety of spring boot iterations have been released.
Java developers adopted spring boot rapidly and in large numbers due to its ease of use. Spring boot is arguably one of the quickest ways to develop Java microservice web applications using REST. Additionally, it is highly suitable for Docker container deployments and rapid prototyping.
Spring io 1.0.0 was released in June of 2014. Spring io is a predefined set of application library dependencies (includes spring projects and third party libraries). This means that if you create a project using a specific version of spring IO, you no longer need to define the versions of the libraries you employ! This includes the majority of popular third-party and spring libraries. This spring initiative includes even spring boot starter projects. If you are using spring io 1.0.0, you do not need to specify the spring boot version when adding dependencies to a starter project. It will automatically assume spring boot version 1.1.1. RELEASE.
Spring I/O is conceptually composed of a foundation layer of modules and an execution layer of domain-specific runtimes (DSRs). The foundation layer is a curated list of spring core modules and third party dependencies. Spring boot is one of spring IO's execution layer DSRs. Thus, there are currently two primary ways to develop spring applications.
Note that whenever a new spring framework version is released, a new spring boot release is typically triggered. This will ultimately result in a new spring io release.
Spring io version 2.0.0 was released in November 2015. This provided a refreshed set of dependencies, including spring boot version 1.3. The spring io team adopted an alphabetical versioning scheme in July 2016. For this, Spring IO employs city names. In the alphabetical versioning scheme, a new name denotes both minor and major updates to the dependency libraries. Consequently, modifications to your application may be necessary based on the specific components used. However, the release of a service under a new name always denotes a maintenance release, so you can use it without breaking your code.
In September 2016, Athens, the first release of the spring io platform with alphabetical city naming, was made available. It included upgrades to spring boot 1.4 and third-party libraries. Since then, several service releases for Athens have been issued (SR1, SR2, SR3 and SR4).
The most recent spring io platform (Brussels-SR1) was introduced in March of 2017. It uses the most recent release of spring boots (1.5.2.RELEASE). Cairo is scheduled to be released alongside spring boot 2.0 and spring framework 5.0 as the next spring io platform.
Spring 5.0 is expected to be released in the fourth quarter of 2017 with support for JDK 9. Spring 5.0 is required for spring boot 2.0. Spring io cairo necessitates the 2.0 release of spring boot. If everything goes according to plan with the JDK 9 release, all of the versions listed above should be available before 2018.
JDK 9 > Spring 5.0 > Spring Boot 2.0 > Spring IO Cairo.