Three ways to define beans;
1)
Java Configuration (you have this as b), this is the preferred way; offers type safety, central location for configuration.
2) Component Scanning (a), quicker to write code (but harder to maintain - etc).
3) XML Configuration, verbose, no type safety.
I'm not sure about your third option (c).
You are providing spring with bean configuration(s) and then it is creating the spring beans, and passing back a proxy to those beans.