Spring如何在XML文件中指定Bean之间的引用关系
Spring是一个IOC(DI)的容器框架,一个典型的Spring项目需要创建一个或多个Bean,这些Bean的配置信息都在配置文件中,Bean的配置文件可以放在classpath下,也可以放在其他目录下。下面我们讲解如何在配置文件中指定两个Bean之间的依赖关系,创建两个类Cat和Person,Person类中的一个属性为Cat类型,如下图所示。
操作方法
- 01
我们在创建的Cat类中定义4个属性,并且创建Cat类的无参构造、有参构造、getter和setter方法,重写toString()方法。创建Person类,同样创建getter和setter方法,重写toString()方法。我们为Cat类创建一个bean,id为cat2,bean的创建方式沿用上文,不明白的朋友可以查看小编之前的文章。接下来创建Person类的bean,使用属性注入的方法添加属性,可以使用property的ref属性建立bean之间的引用关系,如下图所示。我们在运行结果中可以看出打印Person类的对象时,输出的信息有cat的值。
- 02
组成应用程序的bean经常需要相互协作完成应用程序的功能,要使bean能够相互访问,就必须在bean配置文件中指定对bean的引用。我们也可以使用property的<ref>元素来设置bean之间的引用,如下图所示。
- 03
我们也可以在属性或构造器里包含bean的声明,这样的bean称为内部bean,可以不定义id,不能被外部引用。当bean实例仅仅给一个特定的属性使用时,可以将其声明为内部bean,内部bean声明直接包含在<property>或<constructor-arg>元素里,不需要设置任何id或name属性,如下图所示。
- 04
上述步骤介绍的为使用属性注入的方式引入外部bean,下面介绍使用构造器注入的方式引入外部bean,用法大体上是相同的,都是使用ref属性,我们先为Person类增加有参构造,并且再创建一个无参构造,使用构造器注入的结果如下图所示。
- 05
我们将Person类全部属性均使用构造器注入,均在<constructor-arg>元素里添加属性值即可,结果如下图所示。
- 06
下面介绍如何在为bean的属性注入null值,可以使用<null/>元素标签为bean的字符串或其它对象类型的属性注入null值。如下图所示,我们不需要给Person类的对象注入一个Cat类对象这个属性,因此使用<null/>元素表示,如下图所示。
- 07
最后我们介绍级联属性,Spring支持级联属性的配置,我们可以在创建Person类的bean时为Cat类的某一个属性赋值,前提是person的属性car必须先初始化才可以为级联属性赋值,否则会有异常,写法如下图1所示,我们为cat这个bean在person这个bean中设置price属性,运行结果如下图2所示。