7.2.1 配置元数据

如上图所示,Spring的IoC容器使用某种形式的配置元数据,该配置元数据描绘了作为一个程序开发者在程序中如何告诉Spring容器去实例化、配置和组装对象。

传统上,配置元数据以简单而直观的XML格式展现,这也是本章传达Spring IoC容器的关键概念和特性使用最多的形式。

基于XML的元数据是配置元数据唯一允许的形式。Spring IoC容器本身与实际编写配置元数据的格式是完全解耦的。现在,许多Spring应用的开发者选择基于Java的配置

更多有关在Spring容器中使用配置元数据的其他形式的信息,请见:

  • 基于注解的配置:Spring 2.5引入了对基于注解的配置元数据的支持。
  • 基于Java的配置:从Spring 3.0开始,Spring的JavaConfig项目提供的许多功能成为了Spring Framework核心的一部分,因此,您能够通过使用Java而不是XML文件在应用中定义外部bean。要使用这些新功能,请参阅@Configuration@Bean@Import@DependsOn注解。

Spring的配置由至少一个且通常多于一个必须被容器管理的bean组成。基于XML的配置元数据在顶层的<beans/>元素中用<bean/>元素配置这些bean。基于Java的配置通常是在一个@Configuration注解的类中使用@Bean注解方法。

这些bean定义与构成应用程序的实际对象相对应。通常,你可以定义service层对象、数据访问层对象(DAO)、表示对象(比如Struts的Action实例)、基础结构(infrastructure)对象(比如Hibernate的SessionFactory、JMS的Queue)等等。通常不在容器中配置细粒度的域对象,因为那一般是DAO的职责,而且应该由业务逻辑来创建和加载域对象。不过,可以使用Spring与AspectJ的集成来配置在IoC容器控制外已经创建的对象。请参阅在Spring中使用AspectJ向域对象注入依赖

下面示例展示了基于XML的配置元数据的基本结构:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean id="..." class="...">
  7. <!-- collaborators and configuration for this bean go here -->
  8. </bean>
  9. <bean id="..." class="...">
  10. <!-- collaborators and configuration for this bean go here -->
  11. </bean>
  12. <!-- more bean definitions go here -->
  13. </beans>

id属性是一个用于识别单一bean定义的字符串。class属性定义bean的类型,使用完整的类名。id属性的值指向协作对象。引用协作对象的XML片段未在本例中展示,更多信息请参阅依赖