声明:本博客仅仅是一个初学者的学习记录、心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流、一起学习、一起进步的朋友可以加我微信Liu__66666666

这是简单学习一遍之后的记录,后期还会修改。

一、概念引入

​ 我们通过前文

​ Computer类:

public class Computer {      private String type;//电脑型号     private OperatingSystem operatingSystem;//操作系统              public Computer() {}     public Computer(String type, OperatingSystem operatingSystem) {         this.type = type;         this.operatingSystem = operatingSystem;     } //此处略去getter setter toString方法 }

​ OperatingSystem类(这是Computer的一个属性:操作系统)

public class OperatingSystem {     private String name;//操作系统名字,例如Windows、macOS      //操作系统版本,例如,当name为Windows,version为10的时候,就是win10     private String version;      public OperatingSystem(){}     public OperatingSystem(String name, String version) {         this.name = name;         this.version = version;     } //此处略去getter setter toString方法  }

1.构造方法注入(一定要写对应的构造方法!)

​ 此方式使用的是bean标签内部的标签进行依赖注入。

​ 以如下构造方法为例

public Computer(String type, OperatingSystem operatingSystem) {     this.type = type;     this.operatingSystem = operatingSystem; }
<!--macOS mojave--> <bean id="operatingSystem" class="di.OperatingSystem">     <constructor-arg index="0" value="macOS"/>     <constructor-arg index="1" value="Mojave"/> </bean>  <bean id="computer" class="di.Computer">     <constructor-arg index="0" value="MacBook Pro 2019"/>     <constructor-arg index="1" ref="operatingSystem"/> </bean>

​ 标签的写法还是和之前一样,唯一不同的是有了标签体,标签体内部就是用来进行属性设置(依赖注入)的。

​ 每个constructor-arg标签代表构造方法中的一个参数;

​ 属性index代表参数的顺序,从0开始,index=“0”代表的是构造方法的String type这个参数,index=“1”代表的是OperatingSystem这个参数;

​ 属性value代表的是这个参数要传入的值,例如type这个参数对应的是macOS,version是Mojave,一般来说,基本类型和String类型要用value属性来传值。

​ 由于在Computer类中我们引用了OperatingSystem这个对象,所以需要先定义好OperatingSystem这个bean,以供我们将其注入到computer这个bean中,其实OperatingSystem就是Computer的一个依赖。而在第二个bean中,有一个ref属性,这个用来传value传不了的值,ref在本例中的值为operatingSystem这个bean的id。

<!--macOS mojave--> <bean id="operatingSystem" class="di.OperatingSystem">     <constructor-arg name="name" value="macOS"/>