I am reading the Pro Spring 2.5 book and I have a question to how dependency injection works.
I understand the BeanFactory and doing dependency lookups. Now I read about dependency injection and I have some questions. Based on what I understand you want to limit the lookups to the minimum such as looking up an object for boot strapping the application. Then dependency injection will take care of the rest. However I don’t understand this works.
Let say you have a beanfactory, you get an MyApplication instance that starts the whole application. The rest of the objects use dependency injection to get their collaborators. The beanfactory maintains the list of beans it manages but isn’t this factory only available in the main method of the application? And if the beanfactory also manages the scope of their containing beans I don’t understand how that is done. Are the beanfactory global in some way?
The bean factory instantiates all objects. It parses your configuration (xml or annotations), instantiates your beans and sets their dependencies. Then all these beans are stored in the application context.
You usually have an entry point to your application – there you do
context.getBean(..). Now that bean has its dependencies injected, because it is put in the context by the bean factory.The rule of thumb that will probably clear things: you never use the
newoperator (with bean classes) when using a DI framework. The framework makes the instances, not you.