赞
踩
使用Spring框架时,我们经常会在xml文件里装配bean。今天我们认识一下bean元素里的属性都有着哪些用处。
<bean abstract="true" autowire-candidate="default" autowire="default"
class="" dependency-check="default" depends-on="" destroy-method=""
factory-bean="" factory-method="" id="" init-method="" lazy-init="default"
name="" parent="" primary="true" scope="">
<constructor-arg></constructor-arg>
<description></description>
<lookup-method />
<meta key="" value="" />
<property name=""></property>
<qualifier></qualifier>
<replaced-method></replaced-method>
</bean>
1)abstract:默认为false。如果该bean是抽象类则将该属性设置为true,bean factory不会试图预先初始化该bean。另外,该属性不会被子类所继承,你需要在每一个抽象类定义里去声明。
2)autowire-candidate:默认为”default”。设为false,容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其他bean自动装配的候选者,但是该bean本身可以使用自动装配来注入其他bean。
3) autowire:通过何种方法进行属性的自动装配,它有以下五个属性值:
属性值 | 说明 |
---|---|
no | 不启用自动装配,Bean的引用必须通过ref元素进行定义。 |
byName | 通过属性的名字查找JavaBean依赖的对象并为其注入。比如说类Cat有个属性”dog”,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为”dog”的bean,然后使用setter方法为其注入。如果在容器里没有找到id/name属性为”dog”的bean,也不会报错;但同时配置了属性dependency-check=”objects”后,就将抛出一个错误。 |
byType | 通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用setter方法为其注入。如果找到了多个bean,则抛出一个致命的错误。如果没有找到不会报错,除非同时配置了属性dependency-check=”objects”,这时会抛出一个错误。 |
constructor | 同byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用setter方法注入,而是使用构造子注入。如果找不到唯一的bean,就将抛出一个致命的错误。 |
autodetect | 通过类的内省机制选择byType或constructor的注入方式。 |
default | 默认值,由上级标签beans的default-autowire属性确定。 |
4)class:该bean的类路径。
5)dependency-check:依赖检查。
属性值 | 说明 |
---|---|
no | 不检查。 |
simple | 核对所有的原始类型和String类型的属性。 |
objects | 只做对象间的关联检查(包括集合)。 |
all | 检查所有的属性,包括“simple”和“objects”。 |
default | 默认值,由上级标签beans的default-autowire属性确定。 |
6)depends-on:表示一个bean的实例化依靠另一个bean先实例化。
7)destory-method:bean从容器里删除之前要调用的方法。这个方法一般无参、无返回值,否则可能会抛出异常。这个属性只在scope=singleton时有效。
8)factory-bean:调用静态工厂方法的方式创建bean。该bean不同于普通Bean的是:它是实现了org.springframework.beans.factory.FactoryBean接口的Bean,根据该Bean的Id从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身, 如果要获取FactoryBean对象,可以在id前面加一个&符号来获取。
9)factory-method:当调用factory-method所指向的方法时,才开始实例化bean。
10)id:在IoC容器中必须唯一。
11)init-method:bean初始化后需要调用的方法。这个方法一般无参、无返回值,否则可能会抛出异常。
12)lazy-init:默认是false。设为true则延迟加载,该bean不会在ApplicationContext启动时提前被实例化,而是第一次向容器通过getBean方法索取bean时实例化。
13)name:name属性可以相同,后出现的bean会覆盖之前出现的bean。xml解析按照从上到下的顺序,先配置的bean会率先加载到内存中,后配置的bean会覆盖前面的。
14)parent:子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性。父bean必须是抽象bean或者定义了lazy-init=true,也就是说不让bean工厂实例化该bean。
15)primary:该bean优先被注入。
16)scope:用来配置spring bean的作用域,它有以下五个属性值:
属性值 | 说明 |
---|---|
singleton | 默认值,单例模式,在Spring容器中仅存在一个Bean实例。每次getBean(“id”)时获取的都是同一个实例。 |
prototype | 原型模式,每次从容器中调用Bean时,都返回一个新创建的实例。 |
request | 用于web开发,该作用域仅适用于WebApplicationContenxt环境。每次Http请求都会创建一个新的bean,并将bean放入request范围,在同一个request内获得的是同一个bean。 |
session | 用于web开发,该作用域仅适用于WebApplicationContenxt环境。同一个HTTP Session共享一个bean,不同Session使用不同的bean。 |
globalSession | 该作用域仅适用于WebApplicationContenxt环境。一般用于Porlet应用环境,如果不是Porlet环境,globalSession等同于session作用域。Porlet主要用于分布式系统,分布式系统有全局session的概念。 |
1)meta:元数据,当需要使用里面的信息时可以通过key获取。
2)lookup-method:通常称为获取器注入,spring in action中对它的描述是,一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,而实际要返回的bean是在配置文件里面配置的,可用在设计可插拔的功能上,接触程序依赖。
3)replaced-method:可以在运行时调用新的方法替换现有的方法,还能动态的更新原有方法的逻辑。
4)constructor-arg:对bean自动寻找对应的构造函数,并在初始化的时候将设置的参数传入进去
5)property:基本数据类型赋值。
6)qualifier:通过Qualifier指定注入bean的名称。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。