依赖注入:描述了在容器中建立Bean于Bean之间依赖关系的过程
setter注入
在本来已经在service里面引用了bean的相关方法的基础上,再引用之前已经写过的userDao的对象,即在service对象里面既引用到BeanDao,也引用到UserDao,如图所示:
然后需要在这里再定义上他们的setter方法:
再在service的save方法里面引用到引用对象的save方法:
(必须要定义到setter方法,且在save方法里面引用他们自身的save方法,否则无法在ApplicationContext.xml文件里面定义bean)
定义的话,就像这样:
运行结果如下图所示:
当然啦,还可以定义其他的数据类型:![](/i/l/?n=22&i=blog/2808014/202211/2808014-20221114193158315-570041475.png)
然后,以上的数据类型是在BookDaoImpl里面定义的,所以想要在Spring里面引用它的话,就需要在ApplicationContext.xml文件定义的bookDao的bean标签里面进行嵌套,如图所示:
运行出来的话,value里面的值,就相当于付给某个对象的数据的具体值:
构造器注入
通过名称可以看出,这次的注入方式主要是依赖于构造方法,不再依赖于set方法。
通过学习可以发现,这两种注入方式基本上是一致的,就是使用的方法形式发生了改变,具体实现如下:
将之前的Property换成上图的形式,里面的属性都没有发生改变
这种方式会存在这样一个问题:该种方式耦合度过高,当我改变book里面某一个属性的名称时,意味着.xml文件里面的name属性也要进行变化,灵活性太低
可以更改成下面这种方式,将name属性改成type属性:
然后就会发现,如果有两个数据类型相同的对象,就又出现问题了,那我们又可以改成这种形式,这样的话,就会有顺序上面的要求,使用index位置属性代替type类型: