A Bean definition contains the following piece of information called configuration metadata, which helps the container know the following things.
• The way a bean should be created.
• Life cycle details of a bean.
• Associated Bean dependencies.
The above metadata for the bean configuration is provided as a set of properties or attributes in an XML file (configuration file) which together prepare a bean definition. The following are the set of properties.
Properties | Usage |
---|---|
class | In a bean definition, it is a mandatory attribute. It is used to specify the bean class which can be used by the container to create the bean. |
name | In a bean definition, this attribute is used to specify the bean identifier uniquely. In XML based configuration metadata for a bean, we use the id and/or name attributes in order to specify the bean identifier(s). |
scope | This attribute is used to specify the scope of the objects which are created from a particular bean definition. |
constructor-arg | In a bean definition, this attribute is used to inject the dependencies. |
properties | In a bean definition, this attribute is used to inject the dependencies. |
autowiring mode | In a bean definition, this attribute is used to inject the dependencies. |
lazy-initialization mode | In a bean definition, a lazy-initialized bean informs the IoC container to create a bean instance only when it is first requested, instead of startup. |
initialization method | In a bean definition, a callback to be called after all required properties on the bean have been set up by the container. |
destruction method | In a bean definition, a callback to be used when the container that contains the bean is destroyed. |
In the following example, we are going to look into an XML based configuration file which has different bean definitions. The definitions include lazy initialization (lazy-init), initialization method (init-method), and destruction method (destroy-method) as shown below. This configuration metadata file can be loaded either through BeanFactory or ApplicationContext
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- A simple bean definition --> <bean id = "..." class = "..."> <!— Here will be collaborators and configuration for this bean --> </bean> <!-- A bean definition which has lazy init set on --> <bean id = "..." class = "..." lazy-init = "true"> <!-- Here will be collaborators and configuration for this bean --> </bean> <!-- A bean definition which has initialization method --> <bean id = "..." class = "..." init-method = "..."> <!-- Here will be collaborators and configuration for this bean --> </bean> <!-- A bean definition which has destruction method --> <bean id = "..." class = "..." destroy-method = "..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions can be written below --> </beans>