@Thomas,
My point is that in the past 5 or 10 years there have been great advancements in software development. Many areas of programming have remained the same. Sort algorithms are still sort algorithms and clean code is still clean code.
Many of the advancements have come in the area of design, for example in the area of making different components work together. Dependency injection, for example, provides a simpler way to organize how different parts of a system with different functions can work together with an added advantage in that components are easily swappable. Once component can be replaced without affecting the other components.
The new understanding of good design has been shown to be more efficient and easily to code particularly for software that performs multiple functions like modern web application, . There is research showing these principles increase productivity and lower bug rates.
The frameworks build on the new understanding of design principles. Dependency injection is proven to be a great idea, but it requires an infrastructure to support it. Spring (and many other frameworks) provide a ready made framework that engineers can build on top of. Building a dependency injection technology from scratch instead of using existing technology would be a great waste of time.
The principles drive the frameworks. But modern programmers and development teams make use of the frameworks for the same reason that older programmers started using compilers. You don't technically need them, but doing modern work without them is foolish.