People complain that they can’t do what they want in a maven POM file but that is because you aren’t supposed to be able do very much with XML. POM is based on a system that materializes Java objects that do the work. When you find “you can’t get there from here” in a POM that is the time to write a Java class that does what you want and load it into your POM.
If you try Python you might find yourself pining away for maven’s correct dependency resolution algorithm.
Most people think annotations in Spring are a way to avoid the annoyance of XML but you disagree. I will tell you what’s not in the manual though. The Spring core framework, like the maven POM system is all about instantiating ordinary Java objects. Some people though seem to think life isn’t meaningful without ‘plugins’ and ‘integrations’ but unfortunately they pay a heavy price for this. You don’t need “Spring X” to do “X” in fact you are very fortunate if incorporating “Spring X” doesn’t fail your project right there. “Spring X” projects are run by whatever rando got the idea to make it first and there is no quality control or no effort to maintain the Spring brand image. (Though Spring Batch does have some great ideas, unironically, that have been passed down by the macro assembler masters of the mainframe era.)
I still like Spring but a lot of people have moved on to Guice.