极客时间 - 【第三期】21 天打卡活动
极客时间 - 【第三期】21 天打卡活动
#21天打卡#Day-3(2020-02-10)
打卡专栏:小马哥讲Spring核心编程思想
学习要点 & 总结:重新认识 IoC
本章讲述:①什么是 IoC、②IoC 的实现策略、③IoC 的主要职责、④传统的 IoC 实现方案、⑤Spring IoC 的优势。
一、什么是 IoC
简单地说,IoC(Inversion Of Control) 是反转控制,类似于好莱坞原则(你不要来找我,我来找你),主要实现方案有依赖查找和依赖注入两种。
二、IoC 的实现策略
(1)依赖查找:一般是根据名称 name 查找对象 obj,Spring 在此基础上扩展了根据类型 type 和注解 annotation 查找对象,不仅可以查找单个 bean,也可以查找集合 bean。典型的实现有 JNDI 和 Spring。
(2)依赖注入:有构造器注入、参数注入、setter 注入、字段注入、接口回调注入五类。Spring 比较推荐构造器注入,因为可以将字段设置为 final,一旦初始化完成后 bean 不再发生变化,可以像避免线程安全等问题。当然工作中使用最多的似乎是字段注入。
(3)模板方法:比如 Servlet 初始化时,都需要调用模板方法 init(ServletConfig config),通过 init 方法,可以将配置信息 ServletConfig 注入到 Servlet 容器中,这何尝不是一种控制反转呢?
(4)策略模式:可以根据实际需要注入。
(6)service provider interface(SPI):java 原生支持 ServiceLoader,一个文件只能配置一个 KV。Spring 对 SPI 进行了扩展 SpringFactoriesLoader,可以在 spring.factories 文件中配置多个 KV。
三、IoC 的主要职责
如上所述,IoC 主要是进行依赖查找和依赖注入。当然也包括生命周期(容器和 bean)的管理,资源加载等。
四、传统的 IoC 实现方案
(1)JavaBeans:java.beans.beancontext 包下提供了 BeanContext 用于管理所有的 bean,也可以称之为一个简单的 IoC 容器。BeanContext 实现了 Collection 接口,用于注册和查找 bean,同时实现 BeanContextChild 接口,形成父子容器。但总的来说,BeanContext 太简单了,甚至不能根据 name 查找 bean。
(2)JNDI:JNDI 是 JavaEE 规范,Tomcat 和 JBoss 等 Servlet 容器都实现了 JNDI 规范。相对来说 JNDI 要比 JavaBeans 强大,Context 至少提供了根据 Name 查找 obj,同时还有 Reference(BeanDefinition)和 ObjectFacory(FactoryBean) 等概念。但 JNDI 缺少依赖注入,对业务代码侵入太大,关于 JNDI 可以参数我之前的文章 Spring IOC 前世今生之 JDNI。
五、Spring IoC 的优势
Spring 优势有:典型的 IoC 管理,依赖查找和依赖注入、AOP 抽象、事务抽象、事件机制、SPI 扩展、强大的第三方整合、易测试性、更好的面向对象。这会在之后的学习中继续增强这一观点。
#21天打卡#Day-2(2020-02-11)
打卡专栏:小马哥讲Spring核心编程思想
学习要点 & 总结:Spring IoC 容器概述
本章讲述:①Spring IoC 主要功能 ②BeanFacory和ApplicationContext ③生命周期。
一、Spring IoC 主要功能
本小节围绕 Spring IoC 的核心功能:依赖查找、依赖注入、依赖注入的来源
- 依赖查找:①名称查找 ②类型查找 ③注解查找。依赖查找也分为实时查找和延迟查找。
- 依赖注入:①构造器注入 ②setter注入 ③方法注入 ④字段注入 ⑤回调注入。依赖注入也分为实时查找和延迟查找。
- 依赖注入的来源:①定义的bean ②内置bean ③托管bean
- 元信息元来源:BeanDefinition 来源如下 ①基于 XML 文件 ②基于 Properties 文件 ③基于 Java 注解 ④基于 Java API。
二、BeanFacory和ApplicationContext
BeanFactory 是 Spring 底层 IoC 容器。ApplicationContext 除了IoC 容器角色,还提供了一些企业级的特性:①面向切面(AOP)②配置元信息(Configuration Metadata)③资源管理(Resources)④事件(Events)⑤国际化(i18n)⑥注解(Annotations)⑦Environment 抽象(Environment)
三、生命周期
Spring IoC 容器的生命周期:启动、运行、停止。启动的过程 AbstractApplicationContext#refresh
#21天打卡#Day-1(2020-02-12)
打卡专栏:小马哥讲Spring核心编程思想
学习要点 & 总结:Spring Bean 基础
本章讲述:①Bean 注册方式 ②BeanDefinition ③bean 实例化方式 ④bean生命周期
#21天打卡#Day01(2020-02-13)
打卡专栏:小马哥讲Spring核心编程思想
学习要点 & 总结:
本章讲述: