1.概念的理解
- IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。
- DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。
那么IOC和DI这两者又是什么关系呢?
IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。
2.IoC的两种设计模式
- 2.1 工厂模式
某个类中定义用于提供依赖对象的方法,这个方法可以是一个单纯的虚方法,也可以是具有默认实现的虚方法,至于方法声明的返回类型,可以是一个接口或者抽象类,也可以是未被封闭(Sealed)的具体类型。作为它的派生类型,它可以实现或者重写工厂方法以提供所需的具体对象。
Bean、Context的创建是典型的工厂模式 - 2.2反射模式
在运行状态中,根据提供的类的路径或类名,通过反射来动态获取该类的所有属性和方法。 - Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
- 当我们输入一个队长或者类并向调用它的属性和方法时,一按 (“.”)点号,编译器就会自动列出它的属性或方法,这里就会用到反射。
3.DI(依赖注入)的两种注入方式
3.1构造器注入
-
构造器注入是在Bean构造过程中执行的
3.2Setter注入
-
Setter注入是在Bean示例创建完毕之后执行
总结
- Spring引入Autowire(自动装配)机制就是为了解决<bean>标签下<property>标签或<constructor-arg>标签过多的问题
- 对于强依赖,可使用构造器注入,对于弱依赖,推荐使用Setter注入
4.配置和使用
配置方式有
-
xml形式
-注解形式
5.依赖注入的例子
-
消息服务接口和实现类
-
打印器类
-
配置文件
-
应用主类
运行结果