一、bean属性注入的方法:
Car类:
1、setter方法注入:
使用<property>标签进行类属性的设置,且这些进行设置的属性必须有setter方法,其中name属性值为对应类中的属性, value属性用来设置相应属性的属性值
要使用setter方法注入属性,要求类必须只有无参构造器,否则会异常
输出展示:
2、构造器依赖注入:
使用<constructor-arg>标签进行类属性的设置,按照构造器传入值属性顺序注入,当然也可以用标签中的index属性来指定设定的属性,index从0开始算起,type属性用来指定设置的属性的属性类型,value属性用来设置相应属性的属性值
使用构造器依赖注入,类中必须有有参构造器
输出结果:
二、引用其他bean
1、组成应用程序的bean经常需要互相协作以完成应用程序功能,要使bean能够相互访问,就必须在bean配置文件中指定对bean的引用。
Car类
Person类
在bean配置文件中,可以通过<ref>元素或ref属性为bean的属性或构造器参数指定对bean的引用。
输出结果:
2、除了用ref来引用外部定义的bean,我们还可以使用内部bean来达到引用其他bean的目的。
内部bean:当bean实例仅仅给特定的属性使用时,可以将其声明为内部bean。内部bean声明直接包含在<property>或<constructor-arg>元素里,不需要设置任何id或name属性。内部bean不能使用在任何地方。
三、集合属性的设置:
在Spring中可以通过一组内置xml标签(例:<list>,<set>,<map>)来配置集合属性。
1、配置java.util.List类型属性,需要指定<list>标签,在标签内包含一些元素,用<value>指定简单的常量值,用<ref>指定对其他bean的引用,用<bean>内部bean。
2、数组定义和List一样,都使用<list>标签
3、配置java.util.Set使用<set>标签,定义元素方法和List一样
下面是设置List集合属性的例子:
Person类:
bean配置:
输出结果:
4、java.util.Map通过<map>标签定义,包含多个子标签<entry>,每个子标签中包含一个键一个值,<key>包含map的键,而map的值可以为<value><ref><bean><null>元素。也可以将map的键和值作为<entry>标签的属性进行设置,简单常量用key和value属性,bean引用使用key-ref和value-ref属性。
Person类:
bean属性配置:
输出结果:
5、java.util.Properties通过<props>标签定义,包含多个<prop>子标签,每个<prop>子标签必须定义key属性
6、使用utility scheme定义集合:
在使用普通方法定义集合时,不能将集合作为独立的bean定义,导致其他bean不能引用该集合,无法在bean之间共享集合。
但当我们用utility scheme里的集合标签可以定义独立的集合bean,这些独立集合bean必须包含在<beans>根元素内。
定义单例的集合bean需要引入util命名空间,例如单例Map集合bean为:<util:map></util:map>,为标签设置唯一的id属性值,其他bean可以通过他的id对单例集合bean进行引用
四、使用p命名空间配置属性
导入了p命名空间后,可以通过<bean>元素属性配置bean的属性
格式:p:属性名="属性值" 若属性值为其他的bean,则属性名后加-ref,即:p:属性名-ref="属性值"
关注公众号,和我一起学习