As an o̶p̶e̶n̶-̶s̶o̶u̶r̶c̶e̶ (use the term FREE SOFTWARE - fsf.org) framework, Spring was created with a layered structure to simplify the application development process for developers who like to be extremely particular about the components (Core, AOP or MVC) they use.
Features of the Spring framework:
- Lightweight: With the basic version being around 1MB, Spring is remarkably lightweight and has almost no processing overheads.
- Inversion of Control (IoC): Also known as the Dependency Injection, Inversion of Control is one of the most powerful and appealing features of the Spring framework. With the help of IoC, developers no longer need to build a completely different environment for every object and its dependencies. Instead, they can easily create and test any object during the time of handling, without having to unnecessarily include or call upon the dependencies when they are not actually needed. There are mainly two types of Dependency Injections (DI) in Spring that the developers can benefit from:
- Constructor-based DI: Suitable for mandatory dependencies, the constructor-based DI can be accomplished by transferring every argument that exhibits a dependency on other class to the class's constructor.
- Setter-based DI: When a developer is dealing with a no-argument constructor, they can set specific values by passing every argument through a setter function in order to instantiate the bean* under consideration. The Setter-based DI is mostly recommended for optional dependencies, however, the developer can evaluate project requirements to make a final call regarding which DI to implement.
*Bean is a class initialised by a Spring IoC container. Spring Bean have five scopes:
- Prototype: A different 'Prototype' is constructed every time a request for a bean presents itself.
- Request: Similar to the prototype, 'Request' is only valid for web-based applications. For every HTTP request that's generated, Spring creates a brand-new bean instance.
- Singleton: Since a single bean is created for every container, it is considered the default scope of that bean in particular. Remember, beans don't allow you to use a shared instance variable to avoid data-inconsistency.
- Session: A bean is generated separately for every HTTP session.
- Global-session: A 'Global Session' is usually created for Portlet applications.
- Aspect Oriented Programming: Spring is integrated with Aspect Oriented Programming (AOP) that helps in isolating the secondary functions from the business logic of the developer. With an AOP-supported framework, Spring not only offers modularity but also ensures that your code is maintainable.
- MVC architecture: Apart from AOP, Spring also has a highly configurable MVC framework that's perfect for building flexible and robust web applications using technologies like Tiles, iText, JSP, and POI. With ready-to-use components, the Spring MVC architecture is capable of separating the input, business and UI logic (the different elements of any application), using the customizable validation, binding, theme resolution and handler mapping functionalities.
- JDBC exception handling: With an inbuilt and predefined JDBC abstraction layer, Spring accelerates the entire exception handling process. The Spring framework provides a class called JDBCTemplate that optimizes application performance.
As a Java developer, if you're looking to start working with Spring, there couldn’t be a better time than right now, as many tech organizations are actively searching for people with a strong command on Spring. While you're learning, you must take a Spring online test to hone your skills.