正如上节图1.2-1所示,通过编写配置元数据来告诉容器如何实例化、配置以及装配你应用中的 Bean。它通常编写在 XML 文件中,这也是本章介绍 Spring IOC 容器的关键概念和特性时所采用的配置方式。
> XML 不是配置元素的唯一方式,容器本身是与配置文件完全分离的,大多数开发者会选择[基于Java的配置](1.12.基于Java的容器配置.md)方式来开发应用。
更多形式的配置元数据编写方式请参见:
[基于注解的配置](1.9.基于注解的容器配置.md):Spring 2.5版本加入了基于注解的配置元数据。
[基于Java的配置](1.12.基于Java的容器配置.md):从 Spring 3.0开始,由Spring JavaConfig 项目的很多特性已成为 Spring框架的核心部分。因此,你可以通过基于Java 的配置代替 XML在应用外部定义 Bean。要使用这些新特性,请参见`@Configuration`, `@Bean`, `@Import `以及 `@DependsOn`等注解。
 
Spring 的配置通常由容器所管理的多个Bean 的定义组成。基于XML 的配置由`<bean/>`标签表示,并放置顶层`<beans/>`标签内。基于Java的配置方式通常由`@Bean`注解的方法表示,并且方法存在被`@Configuration`注解的类中。
 
这些Bean的定义对应于实际应用中的对象。通常你会定义服务层对象、数据访问对象(DAO)、表现层对象,比如Struts 中的`Action`、基础设施对象,比如 Hibernate中的`SessionFactories`、JMS `Queues`等等。通常不会在容器中定义细粒度的领域对象,因为领域对象的创建和加载是数据访问对象和业务逻辑的职责。无论如何,你可以通过Spring集成的ApectJ来配置非容器创建的对象。详情参见[5.8.1.在 Spring 中使用 AspectJ 注入领域对象](5.8.1.在Spring中使用AspectJ注入领域对象.md)。
 
下面的例子展示了基于 XML 的配置元数据的基本结构。
~~~
<?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.xsd">
<bean id="..." class="...">
<!-- 这里编写此Bean所依赖的其他 Bean的配置 -->
</bean>
<bean id="..." class="...">
<!-- 这里编写此Bean所依赖的其他 Bean的配置 -->
</bean>
<!-- 这里编写更多 Bean 的定义-->
</beans>
~~~
> 1. `id`属性的类型为字符串,它用来唯一标识一个 Bean。
> 2. `class`属性用类的完全限定名来表示Bean的类型。
`id`属性的值表示被其它对象引用的标识,在这个示例中没有展示对象的依赖。有关信息请参见[1.4.依赖](1.4.依赖.md)。
- ---- 阅读说明
- 一、核心技术
- 1.IOC容器
- 1.1.IOC 容器和 Bean 简介
- 1.2.容器概览
- 1.2.1.配置元数据
- 1.2.2.实例化容器
- 1.2.3.使用容器
- 1.3.Bean概览
- 1.3.1.Bean的命名
- 1.3.2.实例化Bean
- 1.4.依赖
- 1.4.1.依赖注入
- 1.4.2.依赖配置详情
- 1.4.5.注入合作者
- 1.4.4.Bean的懒加载
- 1.5.Bean的范围
- 1.6.自定义Bean的特性
- 1.6.1.生命周期回调函数
- 1.7.继承Bean定义
- 1.9.基于注解的容器配置
- 1.9.1.@Required
- 1.12.基于Java的容器配置
- 1.12.3.使用@Bean注解
- 1.15.ApplicationContext的附加功能
- 1.15.4.Web 应用中便捷的 ApplicationContext 实例
- 1.16.BeanFactory
- 2.资源
- 2.7.应用上下文和资源路径
- 3.验证、数据绑定以及类型转换
- 3.5.Spring类型转换
- 3.5.4.ConversionService API
- 5.基于 Spring 的面向切面编程
- 5.8.在 Spring 中使用 AspectJ
- 5.8.1.在 Spring 中使用 AspectJ 注入领域对象
- 二、测试
- 三、数据访问
- 四、Web应用
- 五、Web响应式编程
- 六、集成
- 4.1.介绍
- 七、编程语言