Spring——依赖注入(DI)详解
声明:本博客仅仅是一个初学者的学习记录、心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流、一起学习、一起进步的朋友可以加我微信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; }
- 写法1(不推荐,不常用):
<!--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。
- 写法2(推荐写法,但不常用):
<!--macOS mojave--> <bean id="operatingSystem" class="di.OperatingSystem"> <constructor-arg name="name" value="macOS"/>