Spring中如何配置bean
在讲解Spring中bean的配置之前,首先需要学习两个概念:IOC(反转控制)和DI(依赖注入)。IOC(Inversion of Control)的思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,而应用了IOC之后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接收资源。DI(Dependency Injection)是IOC的另一种表现形式,即组件以一些预先定义好的方式(例如:setter方法)接收来自如容器的资源注入。本文主要讲解基于XML文件的方式配置bean,如下图所示。
操作方法
- 01
我们在XML文件中配置bean时,bean的id用于标识容器,是唯一的。若id没有指定,则Spring自动将全限定名作为bean的名字。id可以指定多个名字,名字之间可以用逗号、分号或空格分隔。class为类的全类名,由包名和类名组成。我们使用xml文件配置bean时,要求实体类必须要有一个无参构造方法,若没有则会启动报错。
- 02
属性注入方式,是通过setter方法为bean注入属性。我们在bean的配置文件中使用property元素中的name属性标识需要注入的bean属性,然后在类中使用setXxx()的方法将属性注入,因此name属性的值必须和setter方法中大写字母开头的名字要一致。如使用setName2()方法,则配置文件中name属性的值必须为name2。
- 03
上述步骤是通过属性注入依赖的方式,下面我们讲解通过构造器注入依赖的方式。通过构造方法来注入bean的属性值或依赖对象,它保证了Bean实例在实例化后就可以使用 。构造器注入在<constructor-arg>元素里声明属性,没有name属性,按照构造方法默认的顺序或指定顺序来注入。如下图所示,可以看到属性注入的顺序完全和构造方法传参的顺序一致。
- 04
我们编写测试代码,在测试代码的main()方法中获取Cat对象,并打印输出该对象。ApplicationContext在初始化上下文时就实例化所有单例的的Bean,用于获取Cat对象。打印输出默认的是调用Cat类的toString()方法,因此在创建类时需要重写toString()方法。
- 05
接下来我们在使用构造器注入时添加index属性用于标识注入的顺序,如下图所示。
- 06
使用构造器注入属性值可以指定参数的位置和参数的类型,用以区分重载的构造器。上述步骤指定了参数的位置,下面我们再为Cat方法创建一个有参构造,传入4个参数,如下图所示,而相应的bean的配置增加了type属性,用于标识字段的类型。
- 07
我们在使用构造器注入时,不仅可以用value属性,也可以使用value子元素。使用双标记的value子元素,中间包裹的位置填入相应的值即可,如下图所示。
- 08
如果我们在使用xml配置bean时,需要注入的属性中含有特殊字符,那么直接将特殊字符写在配置文件中是错误的。若字面值包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来,基本数据类型及其封装类、String等类型都可以采取字面值注入的方式。