The bean factory concept is foundation of Spring as an IOC container. IOC takes the responsibility for making things happen into the framework away from application code. Programmer needs to just configure which dependencies should be set.

BeanFactory interface, an implementation of the Factory design pattern enables objects to be created and retrieved by name. Relationships between objects can also be managed.

BeanFactory supports two object modes:

  1. Singleton mode provides a shared instance of the object with a particular name, which will be retrieved on lookup. Singleton is the default and most often used object mode. It is ideal for stateless service objects.
  2. Prototype mode ensures that each retrieval will result in the creation of an independent object. Prototype mode would be best used in a case where each user needed to have his own object.

The most commonly used BeanFactory definition is the XmlBeanFactory, which loads beans based on definitions in an XML file.

BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));

Beans defined in XML files are lazily loaded, which means that the beans themselves will not be instantiated until they are needed. To retrieve a bean from BeanFactory you can simply call the getBean() method passing in the name of the bean you want to retrieve.

MyBean mybean = (MyBean) factory.getBean("mybean");