Spring is a result of lacking fundamental resources into Java EE, like the glue between all those layers. So, some smart guys created and at that time was a huge achievement.
One of the most celebrated and successful frameworks and probably a complete platform for developing large scalable EE applications ever made. But there are some important things to know about it.
It adds complexity to your code, believes me, you don’t want to solve that bugs inside circular dependencies or having to realize where injection failed, it can take hours.
There are useless or bad designed modules you should avoid, I should cite the infamous Spring MVC, I mean really? I would advise never use that crap, stick with some other stuff for MVC like JSF or vaadin, etc, but avoid Spring MVC because it really sucks!
Spring batch was successful in most applications I’d seen but still sucks sometimes and can be very tricky.
Spring documentation is huge, it remembers me documentation from Apache or drafts for some complex OS. There are parts completely outdated and that could be stepping stone for you.
Spring moved fast, expect to find outdated tutorials and stack overflow answers, old solutions won’t help in new problems.
Spring is so huge that would take years to understand every detail, in most projects, it won’t be needed.
If you ask me I expect Spring dies, I mean really, a framework for injecting stuff inside classes? There is no other solution more elegant? Injecting all those infrastructure dependencies like data sources, other modules other stuff… I don’t know, I really dislike the framework for 2018 and beyond because it remembers me old pure Java 90’s, full of complex stuff without helping you build things focused on business but focused on intrinsic technology and it can’t add any value to the business you are trying to solve! Nothing, zero.
I hope we should stop using these things and focus on business solutions rather than architecture, in the end, we dig our own graves.
One thing you need to know about Spring Framework is that it’s not a single entity. It is divided into several modules which serve their own functionality like:
Mainly it’s used for JEE application development. You can easily integrate your application with various other backend technologies. You can use it to develop standalone applications It’s helpful when you need distributed architecture. It’s a very lightweight framework which reduces the complexity that was there while using EJBs. Using Spring Security, you can make your applications more secure. Using Spring Batch, you can efficiently manage long-running tasks Inversion of Control and Dependency injection adds up to the flexibility and modularity of the application.