Spring DI with different styles
Spring as a dependency injection (DI) framework allows us to define our application components' dependency tree in three different ways:   XML  Annotation  Java Config   I've written a simple app, bookstore, with the three styles and they're available in the following repository. You can take a look and see how each style would look like. It also has a version that uses no Spring beans for comparison.  https://github.com/ryu1kn/spring--working-with-beans  Different styles have different pros/cons. Spring lets you mix the styles; so you can change it as you go.  Here is my observations on each style.  XML-based configuration  Pros   Weak/loose coupling with Spring framework in your app code.  Good for keeping the option of removing Spring later    Class dependency information is centralised.  Fine-grained control on the dependency definition.  Changing only the dependency information doesn't require the recompilation of your app code.   Cons   Unless you have a good IDE ...