正如上節圖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.介紹
- 七、編程語言