背景
本章的重点是介绍如何装配Bean。
1.Spring配置概述
Bean配置信息是Bean的元数据信息,它由四个方面组成:
(1)Bean的实现类;
(2)Bean的属性信息,如数据源的连接数、用户名、密码等;
(3)Bean的依赖关系,Spring根据依赖关系配置完成Bean之间的装配;
(4)Bean的行为配置,如生命周期范围及生命周期各过程的回调函数等。
Bean元数据信息在Spring容器中的内部对应物是由BeanDefinition形成的Bean注册表。
下面这张图描述了Spring容器、Bean配置信息、Bean实现类及应用程序之间的相互关系:
基于xml的配置,spring采用Schema格式。spring配置的Schema文件放置在各模块JAR文件内一个名为config的目录下。
2.依赖注入
(1)属性注入指通过setXxx()方法注入Bean的属性值或依赖对象。Spring只会检查Bean中是否有对应的Setter方法,至于
Bean中是否有对应的属性成员变更则不做要求。Spring配置文件中<property>元素所指定的属性名和Bean实现类的Setter
方法满足Sun JavaBean的属性命名规范:xxx的属性对应 setXxx()方法。JavaBean的变量的前两个字母要么全部大写,要
么全部小写。
(2)构造函数注入,它能保证一些必要的属性在Bean实例化就得到设置,确保Bean实例化后就可以使用。Spring容器能对构
造函数配置的Bean进行实例化的前提是,即构造函数入参引用的对象必须已经准备就绪。如果两个Bean都采用构造函数注入,
而且都通过构造函数入参引用对方,就会发生类似于线程死锁的循环依赖问题。解决办法是修改Bean的代码,将构造函数注入
方式调整为属性注入方式。
(3)工厂方法注入。Spring IoC容器以框架的方式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写
基于工厂方法的类。
3.注入参数详解
(1)字面值,指可用字符串表示的值,这些值可以通过<value>元素标签进行注入。Spring容器在内部为字面值提供了编辑器,
它可以将以字符串表示的字面值转换为内部变量的相应类型。
如果配置文件中的注入值包括下面的特殊字符,可以采用<![CDATA[]]>特殊标签,将包含特殊字符的字符串封装起来,另一个
<