1. Spring ICO理论
假设我向做一个“人开车”的模型,首先我们的要一辆车,其次我们还得要一个人。那么用Java怎么创建呢?酱紫:
public class Car {
private String name;
public Car(String name) {
this.name = name;
}
}
public class Person {
private String name;
private Car car;
public Person(String name, Car car) {
this.name = name;
this.car = car;
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car("法拉利");
Person person = new Person("张三", car);
}
}
再上面的例子中,“人开车”,就需要把车对象注入到人对象中,上面的装载方式是通过构造器将车对象传递进去,这是我们传统的开发模式。而IOC是什么?控制反转。那么就有几个问题了:
1.为什么要有IOC?
传统的开发模式中,我们需要自己手动new 出对象,如果对象之间需要注入,我们可以通过构造器方式,setter方式将被依赖对象注入进去。那么你可以想一想,一两个对象还好说,new set我们可以写出来,但假若有100,1000个对象呢?new 的手累,并且其中依赖关系也是极为的复杂。而IOC就可以解决这2个问题,用一句话概括IOC:管理Java对象的创建及其依赖关系。
2.谁控制谁?
明白第一个问题这个问题就好说,
传统方式中:(谁)coder控制(谁)Java对象。
IOC方式:(谁)IOC容器控制(谁)Java对象。
3.反转什么?
传统方式中我们通过构造器/setter方式注入依赖对象,有了IOC之后,对象只是被动接收依赖的注入。也即依赖对象的获取反转了。
1.1 IOC三种注入方式
1.构造器注入
就是我们开头“人开车”例子中,把车(依赖对象),当作人(被依赖对象)构造器参数传递进去。
2.setter注入
Javabean中我们可以通过getter/setter方式来获取/设置对象的属性。所以也可以通过setter方式把依赖对象注入到被依赖对象内。
3.接口方式注入
接口方式注入需要被依赖对象实现某个接口,也不是很常用。
感性却的胖友可以看看: 依赖注入的三种实现形式 —— 接口注入(Interface Injection)
2. IOC组件
2.1 Resource
org.springframework.core.io.Resource
其实就是Spring对资源的一种抽象描述,比如xxxx.xml
2.1.1 ResourceLoader
有了资源,ResourceLoader 对资源进行加载。
2.2 BeanDefinition
你要描述一个人,可以用name/age/height等等属性进行描述,那么对于JavaBean应该怎么描述呢?org.springframework.beans.factory.config.BeanDefinition
就是对JavaBean的描述,比如是否单例等等。
2.3 BeanFactory
org.springframework.beans.factory.BeanFactory
的内部有一个Map<String,BeanDefinition>
的map用于保存所有的bean,我们可以从中拿到我们想要的bean。
2.4 BeanDefinitionReader
org.springframework.beans.factory.support.BeanDefinitionReader
用于从各种资源中读取JavaBean,比如从xxx.xml
读取出JavaBean对象。
2.5 ApplicationContext
org.springframework.context.ApplicationContext
就是一个Spring容器,翻译过来叫做上下文
,我把它叫做环境。
文章总结
介绍IOC理论以及Spring主要对象。