7.5.1 Bean的基本定义和Bean别名
beans元素
<beans>元素是Spring配置文件的根元素,该元素可以指定如下属性
<beans>元素的属性 |
描述 |
|---|---|
default-lazy-init |
指定该<beans>元素下配置的所有Bean默认的延迟初始化行为。 |
default-merge |
指定该<beans>元素下配置的所有Bean默认的merge行为. |
default- autowire |
指定该<beans>元素下配置的所有Bean默认的自动装配行为。 |
default-autowire-candidates |
指定该<beans>元素下配置的所有Bean默认是否作为自动装配的候选Bean。 |
default-init-method |
指定该<beans>元素下配置的所有Bean默认的初始化方法。 |
default-destroy-method |
指定该< beans.>元素下配置的所有Bean默认的回收方法。 |
<beans>元素下所能指定的属性都可以在每个<bean>子元素中指定,只要将属性名去掉default即可。也就是bean元素上可以指定lazy-init属性,来配置该Bean的默认延迟初始化行为。
在<beans>元素上指定和在<bean>上指定的区别是:
- 如果为
<bean>元素指定这些属性,只对特定Bean起作用; - 如果为
<beans>元素指定这些属性,这些属性将会对<beans>包含的所有Bean都起作用。
当二者所指定的属性不一致时,<bean>下指定的属性会覆盖<beans>下指定的属性。
bean元素
<bean>元素是<beans>元素的子元素,<beans>元素可以包含多个<bean>子元素,每个<bean>子元素定义一个Bean,每个Bean对应Spring容器里的一个Java实例。
bean元素常用属性
定义Bean时,通常需要指定两个属性。
<bean>元素常用属性 |
描述 |
|---|---|
id |
确定该Bean的唯一标识,容器对Bean的管理、访问,以及该Bean的依赖关系,都通过id属性完成。Bean的id属性在Spring容器中应该是唯一的. |
class |
指定该Bean的具体实现类,这里不能是接口。Spring容器必须知道创建Bean的实现类,而不能是接口。在通常情况下, Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。 |
在一些特殊的情况下, Spring会采用其他方式创建Bean实例,例如工厂方法等,则可能不再需要class属性。这些内容需要参考后面的介绍。 |
|
| ### 通过name属性在定义Bean是给Bean指定别名 ### | |
id属性是容器中Bean的唯一标识,这个id属性必须遵循XML文档的i属性规则,因此有一些特殊要求,例如不能以"/"等特殊字符作为属性值。但在某些特殊的情况下,Bean的标识必须包含这些特殊符号,此时可以采用name属性,用于指定Bean的别名,通过访问Bean别名也可访问Bean实例。 |
除了可以为<bean>元素指定一个id属性之外,还可以为<bean>元素指定name属性,用于为Bean实例指定别名。
<bean>元素的id属性具有唯一性,而且是一个真正的XML ID属性,因此其他XML元素在引用该id时,可以利用XML解析器的验证功能。
id属性命名规范
由于XML规范规定了XML ID标识符必须由字母和数字组成,且只能以字母开头。
为什么要使用别名
在一些特殊的情况下(例如与Struts 1整合过程中),必须为某些Bean指定特殊标识名,此时就必须为控制器Bean指定别名。
在其他地方为一个已经存在的Bean实例指定别名
在一些极端的情况下,程序无法在定义Bean时就指定所有的别名,而是需要在其他地方为一个已经存在的Bean实例指定别名,则可使用<alias>元素来完成,该元素可指定如下两个属性。
<alias>元素的属性 |
描述 |
|---|---|
name |
该属性指定一个Bean实例的标识名,表明将为该Bean实例指定别名。 |
alias |
指定一个别名。 |
例如以下示例配置:
1 | <!-- 面代码为该Bean指定三个别名:#abc,@123,abc* --> |
- 上面第一行代码的
name属性为该Bean指定了三个别名#abc,@123,abc*,这些别名中包含了些特殊字符,由此可见,作为别名的字符可以很随意。 - 上面配置的后两行代码则用于为已有的
person这个Bean指定别名。
原文链接: 7.5.1 Bean的基本定义和Bean别名