[spring]XML标签<bean>的二级标签
<bean>之前讲到的几个属性,仅通过这几个属性想要配置完一个Bean的所有信息,还是不够而且不方便。因此<bean>还有下一级的二级标签来配置Bean的相关信息。
上一篇文章
<property>
这个二级标签我们上一篇的例子里面也有出现,作用是给该Bean对象的某个属性赋值。并且该属性需要提供对应setter方法,否则property标签会找不到该属性。
该标签主要有三个标签:name、value、ref。
name用来指定需要设置值的setter方法,一个属性想要通过setter方法注入值,需要配置对应的setter方法。name、setter方法、属性 这三者之间的关系如下图:
这张图可能还不懂,这里我们再创建一个setter方法,也是设置classroom类的属性student的:
然后我们回到bean的配置文件来查看 <bean>标签的 属性name 它的可选值 :
虽然name有两个可选值,而实际上Classroom类只有一个属性student。
value和ref都是用来注入值的。value用来注入基础值,例如int、boolean、String等。ref则用来注入一个对象,该对象是同样在当前XML配置文件里面申明了的其他Bean对象。
当然,同样要注意,当为单例模式的时候,一个IOC容器里面只能存在一个对象。此时多个其他Bean对象注入这个单例的Bean对象,那么其他Bean对象获取到的都是同一个对象(在内存当中),此时要注意多线程的问题。
<constructor-arg>
该标签用于指定创建Bean对象的参数,然后调用对应的有参构造方法。它主要有这几个属性:
name:用来指定参数名字,该参数名与构造函数里面的参数名一致
value/ref:用来输入值的数据,两者区别与property中的 value/ref 一致
type:当使用value时,可以使用该属性声明你所输入的值的类型
该属性是否使用主要看版本
不管我们输入的是什么也好,value值我们给的值原本都是是String类型,然后会自动转换我们所需要的数据类型。但在高版本的spring中,撤掉了自动类型转换,需要我们使用type声明我们输入的数据属于什么类型。
index:设置该参数位于传递的参数列表中的第几个。该属性和name只需要使用其中之一即可,都是用来设置传递的参数所构成的参数列表的。
当有多个参数的时候,便在<bean>下面创建多个<constructor-arg>传递多个参数值即可。注意,你所传递的参数所构成的参数列表必须与某个构造函数的参数列表一致。