来自应用程序主干并且被Spring IoC容器管理的对象被称为beans。bean是一个由Spring IoC容器实例化,组织和管理的对象。这些beans是根据为容器提供的配置元数据来创建的,例如配置在XML文件中的<bean/>元数据标签。
bean定义包含有配置元数据提供的信息,容器必需知道如下一些信息:- 如何创建bean;
- Bean的详细生命周期;
- Bean的依赖;
- class:这个属性指定了创建bean的class;
- name:这个属性指定了bean的唯一标识符。在基于XML的配置元数据中,可以使用id和/或name属性来指定bean的标识符;
- scope:这个属性制定了所创建的对象的使用范围;
- constructor-arg:这个属性被用了注入依赖;
- properties:这个属性也是被用来注入依赖;
- autowiring mode:这个属性也是被用来注入依赖;
- lazy-initialization mode:一个lazy-initialized bean可以告诉IoC容器在第一次被请求创建bean,而不是在容器启动的时候创建;
- initialization method:该属性指定bean的所有必需属性被容器设置好之后被回调的方法;
- destruction method:该属性指定了容器中的bean在被销毁时被回调的方法。
Spring IoC容器完全脱离了配置元数据被编写的格式。有三个非常重要的方法来为Spring容器提供配置元数据:
- 基于XML的配置文件;
- 基于注解的配置;
- 基于Java的配置;
<?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="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with lazy init set on -->
<bean id="..." class="..." lazy-init="true">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with initialization method -->
<bean id="..." class="..." init-method="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with destruction method -->
<bean id="..." class="..." destroy-method="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>