spring bean定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring bean定义相关的知识,希望对你有一定的参考价值。

  1. id和name

    id有命名限制,比如必须以字母开头,在配置文件中id必须唯一

    name没有命名限制,在配置文件中可以有多个name一样的bean,getBean时返回最后定义的那个bean

    如果二者都没定义,例 <bean class="abc.a">, 默认以全限定类名作为bean名,getBean("abc.a");

    如果二者都没定义,并有多个<bean class="abc.a">,则第一个bean用getBean("abc.a")获取,第二个用getBean("abc.a#1")获取,以此类推。

  2. 属性注入

    命名规则,要么前两个字母都大写,要么全部小写

    值为字面量时注意5个特殊字符&<>"',如果值中包含特殊字符,有两种解决办法,一种是<![CDATA[ ]]>,另一种是特殊字符替换,比如<替换为&lt;

    值为引用时可用<ref>元素,包含三个属性:bean(引用同一个容器或父容器的Bean)、local(只引用同一个配置文件的Bean)、parent(引用父容器的Bean)

    如果不用引用,也可以用内部Bean的配置方式,即Bean的定义在Property元素内,这个Bean只能为对应的外部Bean所用,不能用于其他Bean的引用

    null值,如果属性值想为null值,不能像这样<property name="abc"><value></value></property>,这样代表值为空字符串,应该为这样<property name="abc"><value><null/></value></property>

    properties与map类似,只是properties的键值只能是字符串

  3. 构造函数注入

    配置项中最好加索引和类型,比如:<constructor-arg index="0" type="java.lang.String"> <value>abc</value></constructor-arg>,0代表第一个参数,type代表参数类型,这样可以精确定位用类中的哪个构造函数

  4. 父子bean(集合合并)

    子bean可继承父bean的属性,父bean一般会设置abstract="true"(表示不需要实例化),子类中要写 parent="xxx" ,如果属性同名,子bean会覆盖父bean属性,如果想属性合并,比如父类有一个属性是set类型,子类也有一个属性是set类型,如果想属性合并,需要在对应属性中写merge="true"

  5. 简化配置

技术分享图片

技术分享图片

当然还可以更简洁,即引用p命名空间,格式p:属性名="xxx" ,p:属性名_ref="xxx".




以上是关于spring bean定义的主要内容,如果未能解决你的问题,请参考以下文章

Spring第三篇:xml中bean的定义

spring配置(注解)

Spring定义Bean的两种方式:和@Bean

品Spring:实现bean定义时采用的“先进生产力”

Spring Bean后处理器

Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义