One of the most endearing things about the Spring project is the level of activity currently present in the community and the amount of cross-pollination between other projects such as CGLIB, Apache Geronimo, and AspectJ. One of the most touted benefits of open source is that if the project folded tomorrow, you would be left with the code; but let's face it—you do not want to be left with a codebase the size of Spring to support and improve upon. For this reason, it is comforting to know how well established and active the Spring community is.
The origins of Spring can be traced back to the book Expert One-to-One J2EE Design and Development by Rod Johnson (Wrox, 2002). In this book, Rod presented his interface 21 framework, a framework he developed to use in his own applications. Released into the open source world, this framework formed the foundation of the Spring framework as we know it today.
Spring proceeded quickly through the early beta and release candidate stages, and the first official 1.0 release was made available March 24, 2004. Since then, Spring has undergone two point releases and is currently in its 1.1 release (as of the time of writing).
The Spring community is one of the best in any open source project we have encountered. The mailing lists and forums are always active, and progress on new features is usually rapid. The development team is truly dedicated to making Spring the most successful of all the Java application frameworks, and this shows in the quality of the code that is reproduced. Much of the ongoing development in Spring is in reworking existing code to be faster, smaller, neater, or all three.
As we mentioned already, Spring also benefits from excellent relationships with other open source projects, a fact that is extremely beneficial when you consider the large amount of dependency the full Spring distribution has.
From a user's perspective, perhaps one of the best features of Spring is the excellent documentation and test suite that accompany the distribution. Documentation is provided for almost all the features of Spring, making picking up the framework simple for new users. The test suite Spring provides is impressively comprehensive—the development team writes tests for everything. If they discover a bug, they fix that bug by first writing a test that highlights the bug and then getting the test to pass.
What does all this mean to you? Well, put simply, it means that you can be confident in the quality of the Spring framework and confident that, for the foreseeable future, the Spring development team will continue to improve upon what is already an excellent framework.
The main Spring framework project is 100 percent Java based. However, due to the success of the Java version, developers in the .NET world started to feel a little bit left out; thus Mark Pollack and Rod Johnson have started the Spring .NET project. Aside from Rod, both projects have completely different development teams, so the .NET project should have minimal impact on the Spring Java. In fact, the authors believe that this is excellent news. Contrary to popular belief in the Java world, .NET is not a load of garbage produced by the Beast, a fact that the authors can attest to, having delivered several successful .NET applications to our clients. This project opens up whole new avenues for cross-pollination, especially since .NET already has the lead in some areas, such as source level metadata, and should lead to a better product on both fronts. Another side effect of this project is that it makes the move between platforms much easier for developers, because you can use Spring on both sides. This is given even more weight by the fact that other projects such as Hibernate and iBATIS now have .NET equivalents. You can find more information on Spring .NET at www.springframework.net.
One of the offshoot projects of the main Spring project is the Spring Rich Client Platform (RCP), led by Keith Donald. Spring RCP provides a base library for building rich clients using familiar Spring concepts. Spring RCP is still in the early stages of development, but there is enough completed so that you can start putting together some interesting client applications. Spring RCP is covered in more detail in Appendix B.
The Spring IDE project is another offshoot of the main Spring project, and it functions as a plugin for the Eclipse platform. Using Spring IDE, you can get full source highlighting and code insight functionality for your Spring configuration files. You can also reduce the number of errors that can creep into your configuration files, thus speeding up the development cycle. Spring IDE is covered in more detail in Appendix C.
Acegi is a security system project built on top of Spring. Acegi provides the full spectrum of security services required for Spring-based applications including multiple authentication backends, single sign-on support, and caching. We do not cover Acegi in any detail in this book, but you can find more details at http://acegisecurity.sourceforge.net/. Support for Acegi is provided through the Spring forums at http://forum.springframework.org.
At the time of writing, many new pieces of functionality are already planned for the 1.2 release. The main cruxes of this new block of functionality are modifications to the AOP implementation to allow for better integration with AspectJ; JMX integration that allows Spring beans to be published as JMX-managed resources; and Spring itself to be configured using JMX, portlet support, and a documentation tool for Spring configuration files.