c-命名空间
c-命名空间是 在Spring 3.0中引入的,它是在XML中更为简洁地描述构造器参数的方式。要使用它的话,必须要在XML的顶部声明其模式。
构造器注入bean引用
-
示例:
示例 说明:CDPlayer类应该具有自定义构造器,SgtPeppers类没有自定义构造器
-
分析:
c-命名空间的结构
属性名以“c:”开头,也就是命名空间的前缀。接下来就是要装配的构 造器参数名,在此之后是“-ref”,这是一个命名的约定,它会告诉 Spring,正在装配的是一个bean的引用,这个bean的名字是compactDisc,而不是字面量“compactDisc”。
-
我们也可以使用参数在整个参数列表中的位置信息代替参数名:
位置信息
这个c-命名空间属性看起来似乎比上一种方法更加怪异。我将参数的 名称替换成了“0”,也就是参数的索引。因为在XML中不允许数字作 为属性的第一个字符,因此必须要添加一个下画线作为前缀。
使用索引来识别构造器参数感觉比使用名字更好一些。即便在构建的 时候移除掉了调试标志,参数却会依然保持相同的顺序。如果有多个构造器参数的话,这当然是很有用处的。
将字面量注入到构造器中
迄今为止,我们所做的DI通常指的都是类型的装配——也就是将对象 的引用装配到依赖于它们的其他对象之中——而有时候,我们需要做的只是用一个字面量值来配置对象。
使用c-命名空间的属性无法实现装配集合的功能。
p-命名空间--设置属性
将bean引用注入到属性中
Spring提供了更加简洁的p-命名空间, 作为<property>元素的替代方案。为了启用p-命名空间,必须要在 XML文件中与其他的命名空间一起对其进行声明:
-
示例
实体类
xml
cdplayer有属性,并且要与之相关的set方法;所注入bean的ID必须要有所声明
-
p-命名空间的组成
p-命名空间的组成
与c-命名空间很类似
将字面量注入到属性中
与c-命名空间一样,装配bean引用与装配字面量的唯一区别在于是否 带有“-ref”后缀。如果没有“-ref”后缀的话,所装配的就是字面 量。
但需要注意的是,我们不能使用p-命名空间来装配集合,没有便利的 方式使用p-命名空间来指定一个值(或bean引用)的列表。但是,我们可以使用Spring util-命名空间中的一些功能来简化。
util-命名空间
需要在XML中声明util-命名空间及其模式:
util-命名空间所提供的功能之一就是<util:list>元素,它会创 建一个列表的bean。借助<util:list>,我们可以将磁道列表转移 到BlankDisc bean之外,并将其声明到单独的bean之中
-
Spring util-命名空间的元素
util-命名空间的元素