Spring学习笔记
1.IOC的概念:全称是Inversion of Contorl叫做控制反转,和依赖注入概念等同,思想是不需要自己去创建对象,让IOC创建好拿来。
主要是通过引入中间代理消除对象间复杂的耦合关系,并统一管理分散的复杂耦合关系。
IOC三种依赖注入方式:
方式 | 构造方法注入 | Setter注入 | 接口注入 |
---|---|---|---|
好处 | 对象被构造后进入就绪状态,可以马上使用 | 当前对象只要为其依赖对象所对应的属性添加setter方法,就可以通过Setter将相应的依赖对象设置到被注入的对象中 | 被注入对象如果想要为其注入依赖对象,就必须实现某个接口,接口中提供注入方法 |
优点 | 构造后即进入就绪状态; | setter方法可以被继承,允许设置默认值 | — |
缺点 | 当依赖对象比较多时,构造方法参数比较长 | 对象构造后无法进入就绪状态 | 强制被注入对象实现不必要的接口,带有侵入性 |
注:接口和接口方法不重要,重要的是接口声明方法的参数类型必须是“被注入的对象”所依赖的对象类型
2.IOC Service Provider职责是:
1.业务对象的构建管理:IOC Service Provider需要将对象的构建逻辑从客户端对象剥离
2.业务对象间的依赖绑定:IOC Service Provider通过结合之前构建和管理所有业务对象,以及各个业务间可以识别的依赖关系,将这些对象依赖的对象注入绑定,从而保证每个业务对象在使用的时候,可以处于就绪状态。
IOC Service Provider如何管理对象间的关系:
方式一:直接编码方式注册对象管理信息
方式二:配置文件的方式
方式三:元数据方式(即注解的方式)
3.IOC容器之BeanFactory
IOC Service Provider是一个可以有对象创建管理和依赖注入服务的一个容器,是Spring IOC容器的一部分,Spring Ioc还提供对象生命周期管理,线程管理,查找服务,AOP支持等
Spring提供了两种容器类型:BeanFactory和ApplicationContext
BeanFactory:基础类型IOC容器,提供完整的IOC服务支持,如果没有特殊指定,默认采用延迟初始化策略(lazy-load)。
ApplicationContext:在BeanFactory的基础上构建,是相对比较高级的容器实现,其拥有BeanFactory的所有支持,还提供了时间发布、国际化信息等。ApplicationContext间接继承BeanFactory,还实现了其他的接口。
BeanFactory的对象注册与依赖绑定方式:
方式一:直接编码
方式二:外部配置文件方式(properties配置和xml配置)
方式三:注解方式
spring相关的问题:
1.请用自己的语言描述springIOC、DI、MVC的基本执行原理。
答:SpringIOC、DI、MVC主要执行分为三个阶段
配置阶段:主要完成web.xml和Annotation配置
初始化阶段:完成IOC容器的初始化、DI的自动注入和HandlerMapping的初始化
运行阶段:根据用户请求的URL调用对应的Method,将结果打印到浏览器
2.Spring中的Bean是线程安全的吗?为什么?
Spring中的Bean是用户自己写的类,该bean的线程是否安全与spring无关,因为Spring只承担了创建和管理bean的职责,并没有对Bean进行任何修改。
3.使用自己的语言详细描述SpringIOC和DI的工作流程
IOC流程:
a.读取配置文件
b.解析配置文件,并封装成BeanDefinition
c.把BeanDefinition对应的实例放入容器进行缓存
DI流程:
a.循环读取BeanDefinition的缓存信息
b.调用getBean()方法创建对象实例
c.将创建好的对象实例包装为BeanWarpper对象
d.将BeanWapper对象缓存到IOC容器
e.循环IOC容器进行注入