At the same time, this flexibility is a core feature of Spring. In most other frameworks, when you have a use case that isn't supported, you're entirely on your own. Or, worse, end up with in-house patches and hacks to the framework itself. Spring is an integration framework, and so closer to a framework for building frameworks. It just so happens to have a bunch of well supported ecosystem defaults.