I can see the frustrations with Spring, but on the other hand, it can save a lot of time when you're doing any kind of transactional processing.
I remember once about ten years ago (maybe more!) that I had to get outside of the codebase to test an issue for a financial services company I was working for. Our codebase didn't use Spring-- it was a Java stack with a custom framework. The goal was to set up a box outside our public server framework to test an API issue. This was also before containers were really a thing.
I didn't know a thing about Spring at the time. I cranked out a tiny test app in about two days using Spring. I was floored. It wasn't something I could have let the public touch, but still, how cool to be able to piece together a reasonably robust financial services transactional test environment in a couple of days without knowing one thing about the framework (Spring).
Frameworks have a history of adding to the Java infrastructure. Would lambdas and collection streaming have made their way into Java 8 some years back without Groovy test piloting them first? I know, some may consider those to be a negative, too, I guess. A purist might reasonably argue, "What the heck are functional programming patterns doing in Java? Get out, heathen!"
A lot of this is really just about preference, isn't it? I'm retired from the software biz now so I don't care who wins any of these arguments (I didn't care much when I was active, either), but you don't seem to care much for annotations. However, I loved them. Just my personal take on them. Personal preference.
Another thing about libraries is that you don't have to use them. Even if they're established in your codebase, unless their use is enforced by code cops you can, per your example, just continue to use getters and setters the old fashioned way.
I often found, when I was still in the biz, however, that my old habits were outclassed by new stuff. Overall, anything that cuts down on the number of lines of code is good. I'd be curious to know how
@Getter @Setter private int age = 10;
which your Lombok example might use to compact some getter and setter code, is frustrating and painful. Seems kind of cool to me, although I have never tried that library. Now I want to! Time to blow the dust off my intelliJ!!! :-).
Again. Preference, right? I liked compact code wherever was able to use it - with the caveat that like any other old salty programmer I occasionally resisted changing my ways.
Thanks for the article, though. I have read a few of your pieces and I enjoy them.