spring bean定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring bean定义相关的知识,希望对你有一定的参考价值。
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")获取,以此类推。
属性注入
命名规则,要么前两个字母都大写,要么全部小写
值为字面量时注意5个特殊字符&<>"',如果值中包含特殊字符,有两种解决办法,一种是<![CDATA[ ]]>,另一种是特殊字符替换,比如<替换为<
值为引用时可用<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的键值只能是字符串
构造函数注入
配置项中最好加索引和类型,比如:<constructor-arg index="0" type="java.lang.String"> <value>abc</value></constructor-arg>,0代表第一个参数,type代表参数类型,这样可以精确定位用类中的哪个构造函数
父子bean(集合合并)
子bean可继承父bean的属性,父bean一般会设置abstract="true"(表示不需要实例化),子类中要写 parent="xxx" ,如果属性同名,子bean会覆盖父bean属性,如果想属性合并,比如父类有一个属性是set类型,子类也有一个属性是set类型,如果想属性合并,需要在对应属性中写merge="true"
简化配置
当然还可以更简洁,即引用p命名空间,格式p:属性名="xxx" ,p:属性名_ref="xxx".
以上是关于spring bean定义的主要内容,如果未能解决你的问题,请参考以下文章
Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义