We use Spring at work for our current project and it’s good and all… once the configuration is setup. Until then it is a bitch, because what used to be Java code is now pushed out to an XML file and, you guessed it, read into Java code at startup and parsed/validated. Yes we are using annotations so that makes it less painful but still the basic XML is awful.
Trying to do something which Spring has supported for 5 years, separately, doesn’t work.
You cannot define one set of URLs with basic authentication, and another set with form login authentication. Pitiful! Let me explain, you can do it if you upgrade to Spring 3.1 (RC3)
which isn’t quite a stable release yet. It has this awesome new feature which lets you define multiple sets of urls, with it’s own defined authentication manager. Wow, bleeding edge stuff..
Spring is definitely past it’s used by date, but will be around for a long time. I believe software development is in a transitional stage, with no ‘one size fits all’ progression (think of Play, RoR, Grails, Node.js) and there isn’t a clear successor out there for the traditional XMLRPC/REST/server side Java architecture. Maybe there shouldn’t be. But there doesn’t seem to be a good alternative in Java 😦 The best experience I have had to date in Java is using Grails, which leverages Spring, but hides 90% of the complexity through a much cleaner set of configuration files. You can still access everything in Spring if you wish, so it doesn’t ‘cut you off’ from functionality (as much as i’ve used it.)
I firmly believe software development will move towards a much lighter set of frameworks (think ruby:sinatra). More decoupled services with no session state will enable applications to be easier to scale and using API-driven development from the start will enable a clear and fast way to implement functional testing away from UI-driven tests. This will enable very efficient development.