It depends. Of course. :-)
What is the purpose of your configuration file, and more importantly, who is the intended audience? Who will be reading or editing the configuration file later?
If the main purpose is to wire up the application, and it's aimed at developers, and your types are reasonably well named, then you can get away with just using the DI container configuration. The danger there is that you've got a lot of extraneous detail that isn't really germaine to "configuring" the application per-se. If you were going to change, for example, a connection string, you really want that in one place, clearly labelled as a connection string.
That's why I ask what the audience and purpose is. Having that more specifically labelled, concise XML tags can make finding, and editing, the right spots for an administrator easier, quicker, and less error prone.
Having said that, doing anything other than simple name/value pairs with System.Configuration is a giant pain in the tuchus. The .NET configuration classes are buggy, seriously underdocumented, and full of strange, unexpected behavior.
I would suggest starting with the container configuration just to get going, and then take the time to explicitly design your configuration schema, concentrating on your use cases and ease of editing.
I don't know Spring so I can't say anything about how it works there. With Unity it's pretty easy to mix and match. You can use the API AND configuration files, so put the stuff your application needs to operate into API calls, and the user-tweakable stuff into the config file. That and dividing up into separate container definitions and even separate config files gives you the ability to segregate the internal wiring from the stuff that admins should, or would need to, touch.
Also, as a last resort the Unity config schema is itself extensible, so you could actually add tags to the Unity config section. But that requires doing work with System.Configuration and fitting it into the Unity config framework, so that's even more work.
So, TL;DR: There's no one good answer here. The general DI config schema has the advantage of being general, and already written. It has the disadvantage that it's not necessarily obvious what needs to be tweaked by an admin, and what is internal wiring details that would break things badly. Custom configuration sections are potentially a lot of work to write, but if done well will provide clear and obvious points for admins to edit without breaking the entire edifice in a non-obvious way.