bean元素的属性

来源:互联网 发布:杭州运维前哨网络骗局 编辑:程序博客网 时间:2024/04/29 00:18

使用Spring框架时,我们经常会在xml文件里装配bean。今天我们认识一下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>

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的概念。

bean的子元素

1)meta:元数据,当需要使用里面的信息时可以通过key获取。

2)lookup-method:通常称为获取器注入,spring in action中对它的描述是,一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,而实际要返回的bean是在配置文件里面配置的,可用在设计可插拔的功能上,接触程序依赖。

3)replaced-method:可以在运行时调用新的方法替换现有的方法,还能动态的更新原有方法的逻辑。

4)constructor-arg:对bean自动寻找对应的构造函数,并在初始化的时候将设置的参数传入进去

5)property:基本数据类型赋值。

6)qualifier:通过Qualifier指定注入bean的名称。

0 0