I hate it when I see job titles that include the name of a software framework in it, like “ASP.NET developer”, “SharePoint developer”, “Struts developer”, etc. They make it sound as if knowing how to use the framework in question is the only competence the candidate is supposed to have. In reality, since any framework is just a leaky abstraction of the underlying platform services, knowing the dirty details of what’s abstracted away is an absolute must.
Now, assuming you are a Java developer and have used Spring before, what would you say if someone would ask you: Are you a Spring developer? A normal response ought to be No, I don’t develop the framework, though I’ve used Spring in some projects, but you already know that’s not what was meant by the question. How come the concept of Spring developer does not cause confusion or ambiguity? Because it highlights Spring Framework’s de facto status as a sort of “programming model” and a core competence.
But let’s make this clear shall we. For what it’s worth, Spring is not a programming model. AOP is a programming model. Inversion of control is a programming principle. Dependency injection is a programming technique. Enterprise service abstraction is a complex application of OOP patterns to isolate business code from infrastructural changes. Spring is an application framework that successfully applies all of the above and wraps it in a box with a catchy label. If you add other Spring portfolio projects, tools and community contributions, you may also argue that Spring starts to look like a more or less coherent development environment.
Java landscape is huge, but Spring has become so versatile that it has given a new perspective to it and keeps reshaping this landscape into something … not even sure how I should call it. Would “leaner” be the right adjective? Personally I’m very enthusiastic about what SpringSource and the community around it are doing. Perhaps that is why I’m starting a blog dedicated to Spring Framework.