Spring came out when J2EE was in a bit of a mess. How it got into said mess is clear. Old CORBA shops wanting to have leverage in Java's direction pushed the design of J2EE into a world that it didn't need.
Soon you had local AND remote inferfaces, six files to configure just to get a simple entity out the door.
And the fact that Java was slow to support dependency injection. Which, is still a questionable technique that adds un-needed complexity and confusion to projects. Unless you really have dynamic type extensions over the life of the project or insane testing requirements, DI is a rats nest.
Take for example Springs wonderful implementation of @Service and @Repository and @Entity. Wow they finally support annotations. When you declare with @repository you get automatically exception translation back out to the invoker of the transaction. Sounds like a good idea. Until it gets confusing how the heck did this exception happen. No worries, you can control the translation via endless configuration files. Like the scene in brazil where deniro installs the patch to the air conditioning, its a maze of wires and pumping organs. ick.
Ah wait, it gets worse. Even with exception translation the calling method should receive what they translate to. Err no. Using a repository model the caller of the caller of the caller of the invocation is needed to trap exceptions. Aka yes, we had to set up THREE FASCADE calling layers to solve this. ARE YOU KIDDING ME!!!! And this is required if you really want to protect your code and log exceptions.
Anyways, J2EE was a mess. Spring stepped in. And for a while, it got customers. All hail spring.
But then, Java got its act in order. Cleaned up the interfaces. Cleaner simpler better. And Spring was trounced.
So after a year of trying to cobble Spring into a project, there were at least 5 times I had to stay until midnight and fix a mess that no one else could figure out. Security and password encryption are big messy areas in Spring. You would go down a path that SHOULD work, and it just wouldnt.
After losing about 5 years off my lifespan dealing with this non-sense, Lets officially announce - Spring is dead - except for loony psychos who like to play with fire. The community process and vetting is there for a reason in Java. It moderates out the chaos and eventually dumps bad design. In Spring, there is nothing.
Oh yah, and now java has simple clean dependency injection. There is simply no reason to lock into a single vendor anymore. With java we have the different app server platforms, even different JDK versions. And Oracle is ensuring quality. This is not just bias.
Will I ever do another Spring project? Uh, there aint enough gold in the Universe.