项目实训 9 学习Spring(3)

220 阅读4分钟

1.4.2:依赖性和详细配置:

可以将 bean 属性和构造函数参数定义为对其他托管 bean(协作者)的引用或内联定义的值

直值:

元素的value属性输入为字符串形式。spring能将这些字符串值从string转化成属性相应的实际类型。

image.png

还可以进行直接配置实例(只能属性是java.util.Properties的类型才能使用):

image.png

Spring 容器使用 JavaBeans PropertyEditor机制将元素内的文本转换为java.util.Properties实例。

idref元素:

idref元素只是将容器中另一个 bean 的id(字符串值-不是引用)传递给或元素的一种防错方法。

例:

image.png

image.png

第一种形式优于第二种形式,因为使用idref标签可以使容器在部署时验证所引用的命名 Bean 实际上是否存在。在第二个变体中,不对传递给client bean 的targetName属性的值执行验证。仅在实际实例化client bean 时才发现拼写错误(极有可能导致致命的结果)。

ref元素(对其他bean的引用):

将一个 bean 的指定属性的值设置为对容器中另一个 bean(协作者)的引用。

通过标签的bean属性指定目标 bean 是最通用的形式,并且允许创建对同一容器或父容器中任何 bean 的引用,而不管它是否在同一 XML 文件中。 bean属性的值可以与目标 Bean 的id属性相同,也可以与目标 Bean 的name属性中的值之一相同。

通过parent属性指定目标 bean 将创建对当前容器的父容器中的 bean 的引用。

要求有层次结构,并且子容器中bean名称要与调用bean的名称一致,例:

image.png

内部bean:

或元素内的元素定义了一个内部 bean。

内部 bean 定义不需要定义的 ID 或名称。如果指定,则容器不使用该值作为标识符。容器在创建时也将忽略scope标志,因为内部 Bean 始终是匿名的,并且始终与外部 Bean 一起创建。不可能独立地访问内部 bean 或将其注入到协作 bean 中而不是封装到封闭 bean 中。

image.png

集合:

,,和元素分别设置 Java Collection类型List,Set,Map和Properties的属性和参数。例:

image.png

合并集合:

Spring 容器还支持合并集合。应用程序开发人员可以定义父级,,或元素,并使子级,,或元素继承并覆盖父级集合中的值。也就是说,子集合的值是合并父集合和子集合的元素的结果,子集合的元素将覆盖父集合中指定的值。

例:

image.png

注意child bean 定义的adminEmails属性的元素上使用了merge=true属性。merge属性必须在较低的继承的子定义中指定。当child bean 被容器解析并实例化时,生成的实例具有adminEmails Properties集合,该集合包含将子代的adminEmails集合与父代的adminEmails集合合并的结果。子Properties集合的值集继承了父的所有属性元素,而子support值的值覆盖父集合中的值。

在元素的特定情况下,将保留与List集合类型关联的语义(即,值ordered集合的概念)。父级的值位于所有子级列表的值之前。对于Map,Set和Properties集合类型,不存在排序。

集合合并的限制:

您不能合并不同的集合类型。

强类型集合:

image.png

当准备注入something bean 的accounts属性时,可以通过反射获得有关强类型Map<String, Float>的元素类型的泛型信息。因此,Spring 的类型转换基础结构将各种值元素识别为Float类型,并且字符串值(9.99, 2.75和3.99)被转换为实际的Float类型。

空字符串值和空字符串:

image.png

p-namespace的XML快捷方式:

p-namespace 允许您使用bean元素的属性(而不是嵌套的元素)来描述协作 Bean 的属性值,或同时使用这两者。

例:

image.png

p 名称空间没有架构定义,因此可以将属性名称设置为p属性名称。

image.png

对于p命名空间,spouse是属性名称,而-ref部分表示这不是一个直接值,而是对另一个 bean 的引用。

具有c-namespace的XML快捷方式:

image.png

对于极少数情况下无法使用构造函数自变量名称的情况,可以对参数索引使用后备,如下所示:

image.png

由于 XML 语法的原因,索引符号要求前导_的存在,因为 XML 属性名称不能以数字开头

复合属性名称:
设置 bean 属性时,可以使用复合属性名称或嵌套属性名称,只要路径中除最终属性名称之外的所有组件都不是null即可。

image.png

something bean 具有fred属性,该属性具有bob属性,该属性具有sammy属性,并且最终的sammy属性被设置为123的值。