当前位置:   article > 正文

bean元素的属性_bean元素属性

bean元素属性

使用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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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的名称。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/650924
推荐阅读
相关标签
  

闽ICP备14008679号