详解Spring中使用xml配置bean的细节

网友投稿 353 2023-05-04


详解Spring中使用xml配置bean的细节

整理总结刚学的关于spring的xml配置bean的知识。

在ApplicationContext.xml文件中使用bean节点配置bean,bean的属性id在IOC容器中必须是唯一的。

依赖注入有三种方式

属性注入

构造方法注入

工厂方法注入(很少使用,不推荐,本文不再介绍)

属性注入

通过 setter 方法注入Bean 的属性值或依赖的对象。属性注入使用 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值 。属性注入是实际应用中最常用的注入方式。HelloWorld类中的setName()方法,对应上边代码中的name属性,例如:把setName()方法名改为setName2(),property中的name属性值为name时则会报错,需要将name属性改为name2。

构造方法

构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。

构造器注入在 元素里声明属性, 中没有 name 属性。使用value属性值或value子节点为属性赋值。可以同时使用索引 index 和type属性对应为哪个属性赋值。index的值表示构造函数中参数的位置。type表示成员属性的类型,例如type="double" 或者type="java.lang.String"

如果注入的值有特殊字符如”<>“,使用<![CDATA[]]> 包起来,不包起来的话xml会报错。如:

<![CDATA[]]>

控制台打印的值为

在给bean注入属性时,若包含其他bean,可以通过 元素或 ref 属性为 Bean 的属性或构造器参数指定对 Bean 的引用。

也可以在属性或构造器里包含 Bean 的声明, 这样的 Bean 称为内部 Bean,当 Bean 实例仅仅给一个特定的属性使用时, 可以将其声明为内部 Bean. 内部 Bean 声明直接包含在 元素里, 不需要设置任何 id 或 name 属性,内部 Bean 不能使用在任何其他地方。

&QhOsQztmblt;/constructor-arg>

<![CDATA[]]>

250

可以使用专用的 元素标签为 Bean 的字符串或其它对象类型的属性注入 null 值。

和 Struts、Hiberante 等框架一样,Spring 支持级联属性的配置。但属性需要先初始化。例如代码中需要配置car对象的bean

集合属性

当注入的属性是集合时,Spring也提供了通过一组内置的 xml 标签(例如: , ) 来配置集合属性。

配置 java.util.List 类型的属性, 需要指定 标签, 在标签里包含一些元素. 这些标签可以通过 指定简单的常量值, 通过 指定对其他 Bean 的引用. 通过 指定内置 Bean 定义. 通过 指定空元素. 甚至可以内嵌其他集合.

数组的定义和 List 一样, 都使用 配置 java.util.Set 需要使用 标签, 定义元素的方法与 List 一样。

Java.util.Map 通过 标签定义, 标签里可以使用多个 作为子标签. 每个条目包含一个键和一个值。必须在 标签里定义键,因为键和值的类型没有限制, 所以可以自由地为它们指定 , , 元素.

可以将 Map 的键和值作为 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义。

使用 定义 java.util.Properties, 该标签使用多个 作为子标签. 每个 标签必须定义 key 属性.

root

123456

jdbc:mysql:///test

com.mysql.jdbc.Driver

使用基本的集合标签定义集合时, 不能将集合作为独立的 Bean 定义, 导致其他 Bean 无法引用该集合, 所以无法在不同 Bean 之间共享集合.

可以使用 util schema 里的集合标签定义独立的集合 Bean. 需要注意的是, 必须在 根元素里添加 util schema 定义。

使用 p 命名空间

为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。

Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 元素属性的方式配置 Bean 的属性。使用 p 命名空间后,基于 XML 的配置方式将进一步简化。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java常用类String的面试题汇总(java面试题)
下一篇:获取实现接口的类(获取接口请求时间)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~