测试结果如下截图,均符合预期:

注:构造器注意需要注意循环依赖的问题。
设值注入
设值注入是spring容器在调用过无参构造函数或者无参工厂方法后,然后通过调用其setter方法进行依赖的注入。
Set注入比较简单,之前的文章spring容器和配置初识所举的例子就是setter注入。下面是一段xml配置极其说明:
依赖注入实例
依赖有多种类型,包含基本类型(int、double、string等)和复杂类型(系统类和自定义的类),下面依次说明它们在注入过程中需要注意的问题。
设置注入和构造器注入对应的标签分别是
直接类型(原始类型、字符串等)
直接类型直接使用value子标签或者属性配置即可。Spring的conversion service 会自动把字符串转化为真正的属性(属性或者构造函数参数)。
对应设置注入,由javabean规范和name属性可以准确的确定类型,故转换不存在问题。但是对于构造器注入,如果不对type或者name进行限制,可能会产生非预期结果。
如下一段配置实是上文中构造器中的一个片段,另外增加了设置注入加以比较。运行结果可以自行测试:
另外类型为java.util.properties可以采用类似下面的配置:
jdbc.driver.className=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mydb
Idref标签
Idref子标签只是一个把某个bean的id传递作为依赖传递给另外一个bean的防止错误的方式。通过只传递bean的id,可以构建构建更加灵活的程序。
基本的配置如下:
引用其他bean
引用其他bean是spring中及其常见的场景,这种配置通过
基本样式如下:
或者
以上两者的区别是:前者在当前spring容器和父容器中寻找id(name)为someBean 的对象,而后者只在父容器中寻找。
而ref属性是前者的简写。
下面看具体的例子:
内部bean
在
集合
Java的强大之处之一在于jdk提供了强大的集合框架,spring当然提供了注入集合的方法。
自从java1.5开始,支持泛型,我们的集合尽量使用泛型,另外关于集合合并涉及到bean定义的继承,这里暂不讨论。
首先引入一个带集合属性的bean,省略了构造函数和get set方法。
public class FruitCollection {
private Set
fruits;
private List
fruitList; private Map
fruitMap; private Properties ppp; }
具体见下面的配置代码:
t1
t2
t3
t4
Null和空串
Spring支持注入null和字符串的空串,见如下的配置:
实际相当于分别执行了如下方法:
setUltimateAnswer(null);
setUltimateAnswer("");
缩写
Spring的bean配置文件的格式除了以上用了多次的标准形式,还有一些简单的缩略形式,这些缩略形式是基于xml命名空间,分别是p-nameplace和c-nameplace,依次对应seter注入和 构造器注入。
这里不再赘述。直接贴一个spring官方文档的示例来说明p命名空间:
复合属性名
嵌套的注入,fruit 有个apple属性,假设apple 有个 color属性。那么可以在fruit的定义中直接为color注入属性,前提是apple不为null:
结束
本文从spring两种依赖注入讲起,然后举出具体的配置例子依次讲解到了大部门的注入实例,本文中大部分的例子均通过测试,环境为spring4.1.5。但本人水平有限,肯定有很多不当和不完整支持,期待共同进步,本文中的实例用到的代码地址为:本文资源下载地址(免积分)