当前播放: 45 | 层次性依赖查找:依赖查找也有双亲委派?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:Spring Framework总览 (12讲)
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 课前准备:学习三件套(工具、代码与大脑)
免费
04 | 特性总览:核心特性、数据存储、Web技术、框架整合与测试
免费
05 | Spring版本特性:Spring各个版本引入了哪些新特性?
免费
06 | Spring模块化设计:Spring功能特性如何在不同模块中组织?
07 | Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?
08 | JDK API实践:Spring怎样取舍Java I/O、集合、反射、动态代理等API的使用?
09 | Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?
10 | Spring编程模型:Spring实现了哪些编程模型?
11 | Spring核心价值:我们能从Spring Framework中学到哪些经验和教训呢?
12 | 面试题精选
第二章:重新认识IoC (9讲)
13 | IoC发展简介:你可能对IoC有些误会?
14 | IoC主要实现策略:面试官总问IoC和DI的区别,他真的理解吗?
15 | IoC容器的职责:IoC除了依赖注入,还涵盖哪些职责呢?
16 | 除了Spring,还有其它的IOC容器实现吗?
17 | 传统IoC容器实现:JavaBeans也是IoC容器吗?
18 | 轻量级IoC容器:如何界定IoC容器的“轻重”?
19 | 依赖查找 VS. 依赖注入:为什么 Spring 总会强调后者,而选择性忽视前者?
20 | 构造器注入 VS. Setter 注入:为什么 Spring 官方文档的解读会与作者的初心出现偏差?
21 | 面试题精选
第三章:Spring IoC容器概述 (9讲)
22 | Spring IoC依赖查找:依赖注入还不够吗?依赖查找存在的价值几何?
23 | Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?
24 | Spring IoC依赖来源:依赖注入和查找的对象来自于哪里?
25 | Spring IoC配置元信息:Spring IoC有哪些配置元信息?它们的进化过程是怎样的?
26 | Spring IoC容器:BeanFactory和ApplicationContext谁才是Spring IoC容器?
27 | Spring应用上下文:ApplicationContext除了IoC容器角色,还提供哪些特性?
28 | 使用Spring IoC容器:选BeanFactory还是ApplicationContext?
29 | Spring IoC容器生命周期:IoC容器启停过程中发生了什么?
30 | 面试题精选
第四章:Spring Bean基础 (11讲)
31 | 定义Bean:什么是BeanDefinition?
32 | BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?
33 | 命名Spring Bean:id和name属性命名Bean,哪个更好?
34 | Spring Bean的别名:为什么命名Bean还需要别名?
35 | 注册Spring Bean:如何将BeanDefinition注册到IoC容器?
36 | 实例化Spring Bean:Bean实例化的姿势有多少种?
37 | 初始化Spring Bean:Bean初始化有哪些方式?
38 | 延迟初始化Spring Bean:延迟初始化的Bean会影响依赖注入吗?
39 | 销毁Spring Bean: 销毁Bean的基本操作有哪些?
40 | 回收Spring Bean:Spring IoC容器管理的Bean能够被垃圾回收吗?
41 | 面试题精选
第五章:Spring IoC依赖查找(Dependency Lookup) (9讲)
42 | 依赖查找的今世前生:Spring IoC容器从Java标准中学到了什么?
43 | 单一类型依赖查找:如何查找已知名称或类型的Bean对象?
44 | 集合类型依赖查找:如何查找已知类型多个Bean集合?
45 | 层次性依赖查找:依赖查找也有双亲委派?
46 | 延迟依赖查找:非延迟初始化Bean也能实现延迟查找?
47 | 安全依赖查找
48 | 内建可查找的依赖:哪些Spring IoC容器内建依赖可供查找?
49 | 依赖查找中的经典异常:Bean找不到?Bean不是唯一的?Bean创建失败?
50 | 面试题精选
第六章:Spring IoC依赖注入(Dependency Injection) (20讲)
51 | 依赖注入的模式和类型:Spring提供了哪些依赖注入的模式和类型?
52 | 自动绑定(Autowiring):为什么Spring会引入Autowiring?
53 | 自动绑定(Autowiring)模式:各种自动绑定模式的使用场景是什么?
54 | 自动绑定(Autowiring)限制和不足:如何理解和挖掘官方文档中深层次的含义?
55 | Setter方法依赖注入:Setter注入的原理是什么?
56 | 构造器依赖注入:官方为什么推荐使用构造器注入?
57 | 字段注入:为什么Spring官方文档没有单独列举这种注入方式?
58 | 方法注入:方法注入是@Autowired专利吗?
59 | 接口回调注入:回调注入的使用场景和限制有哪些?
60 | 依赖注入类型选择:各种依赖注入有什么样的使用场景?
61 | 基础类型注入:String和Java原生类型也能注入Bean的属性,它们算依赖注入吗?
62 | 集合类型注入:注入Collection和Map类型的依赖区别?还支持哪些集合类型?
63 | 限定注入:如何限定Bean名称注入?如何实现Bean逻辑分组注入?
64 | 延迟依赖注入:如何实现延迟执行依赖注入?与延迟依赖查找是类似的吗?
65 | 依赖处理过程:依赖处理时会发生什么?其中与依赖查找的差异在哪?
66 | @Autowired注入:@Autowired注入的规则和原理有哪些?
67 | JSR-330 @Inject注入:@Inject与@Autowired的注入原理有怎样的联系?
68 | Java通用注解注入原理:Spring是如何实现@Resource和@EJB等注解注入的?
69 | 自定义依赖注入注解:如何最简化实现自定义依赖注入注解?
70 | 面试题精选
第七章:Spring IoC依赖来源(Dependency Sources) (8讲)
71 | 依赖查找的来源:除容器内建和自定义Spring Bean之外,还有其他来源提供依赖查找吗?
72 | 依赖注入的来源:难道依赖注入的来源与依赖查找的不同吗?
73 | Spring容器管理和游离对象:为什么会有管理对象和游离对象?
74 | Spring Bean Definition作为依赖来源:Spring Bean的来源
75 | 单例对象作为依赖来源:单体对象与普通Spring Bean存在哪些差异?
76 | 非Spring容器管理对象作为依赖来源:如何理解ResolvableDependency?
77 | 外部化配置作为依赖来源:@Value是如何将外部化配置注入Spring Bean的?
78 | 面试题精选
第八章:Spring Bean作用域(Scopes) (9讲)
79 | Spring Bean作用域:为什么Spring Bean需要多种作用域?
80 | "singleton" Bean作用域:单例Bean在当前Spring应用真是唯一的吗?
81 | "prototype" Bean作用域:原型Bean在哪些场景下会创建新的实例?
82 | "request" Bean作用域:request Bean会在每次HTTP请求创建新的实例吗?
83 | "session" Bean作用域:session Bean在Spring MVC场景下存在哪些局限性?
84 | "application" Bean作用域:application Bean是否真的有必要?
85 | 自定义Bean作用域:设计Bean作用域应该注意哪些原则?
86 | 课外资料:Spring Cloud RefreshScope是如何控制Bean的动态刷新?
87 | 面试题精选
第九章:Spring Bean生命周期(Bean Lifecycle) (18讲)
88 | Spring Bean 元信息配置阶段:BeanDefinition配置与扩展
89 | Spring Bean 元信息解析阶段:BeanDefinition的解析
90 | Spring Bean 注册阶段:BeanDefinition与单体Bean注册
91 | Spring BeanDefinition合并阶段:BeanDefinition合并过程是怎样出现的?
92 | Spring Bean Class加载阶段:Bean ClassLoader能够被替换吗?
93 | Spring Bean实例化前阶段:Bean的实例化能否被绕开?
94 | Spring Bean实例化阶段:Bean实例是通过Java反射创建吗?
95 | Spring Bean实例化后阶段:Bean实例化后是否一定被是使用吗?
96 | Spring Bean属性赋值前阶段:配置后的PropertyValues还有机会修改吗?
97 | Aware接口回调阶段:众多Aware接口回调的顺序是安排的?
98 | Spring Bean初始化前阶段:BeanPostProcessor
99 | Spring Bean初始化阶段:@PostConstruct、InitializingBean以及自定义方法
100 | Spring Bean初始化后阶段:BeanPostProcessor
101 | Spring Bean初始化完成阶段:SmartInitializingSingleton
102 | Spring Bean销毁前阶段:DestructionAwareBeanPostProcessor用在怎样的场景?
103 | Spring Bean销毁阶段:@PreDestroy、DisposableBean以及自定义方法
104 | Spring Bean垃圾收集(GC):何时需要GC Spring Bean?
105 | 面试题精选
第十章:Spring配置元信息(Configuration Metadata) (9讲)
106 | Spring配置元信息:Spring存在哪些配置元信息?它们分别用在什么场景?
107 | Spring Bean配置元信息:BeanDefinition
108 | Spring Bean属性元信息:PropertyValues
109 | Spring容器配置元信息
110 | 基于XML资源装载Spring Bean配置元信息
111 | 基于Properties资源装载Spring Bean配置元信息:为什么Spring官方不推荐?
112 | 基于Java注解装载Spring Bean配置元信息
113 | Spring Bean配置元信息底层实现之XML资源
114 | Spring Bean配置元信息底层实现之Properties资源
45 | 层次性依赖查找:依赖查找也有双亲委派?

45 | 层次性依赖查找:依赖查找也有双亲委派?

小马哥
《Spring Boot 编程思想》作者
239讲 约2500分钟7959
单独订阅¥199
2人成团¥129
2
本节摘要

春节假期课程将暂停更新一次,下次更新定为 2020 年 2 月 6 日,极客时间祝你新春快乐
课件和 Demo 地址
https://github.com/geektime-geekbang/geekbang-lessons

展开
登录 后留言

精选留言(5)

  • Jxin
    1.基本都是单一查找,依赖查找可以在LB这种场景应用,但这个分层查找有啥用?
    2.看着demo随手改了下,相对于双亲模式,多了一个HierarchicalBeanFactory的类型判断。

        private static boolean containsBean(HierarchicalBeanFactory beanFactory, String beanName) {
            final BeanFactory parentBeanFactory = beanFactory.getParentBeanFactory();
            // parentBeanFactory 非层级结构 则看自己
            if (!(parentBeanFactory instanceof HierarchicalBeanFactory)) {
                return beanFactory.containsLocalBean(beanName);
            }
            // parentBeanFactory 是层级结构 先看parentBeanFactory
            if (containsBean((HierarchicalBeanFactory) parentBeanFactory, beanName)) {
                return true;
            }
            // parentBeanFactory 是层级结构 且parentBeanFactory不包含, 则看自己
            return beanFactory.containsLocalBean(beanName);
        }

    作者回复: 1.基本都是单一查找,依赖查找可以在LB这种场景应用,但这个分层查找有啥用?

    比如 Spring MVC 中,Biz 组件放在 Root ApplicationContext,而 Web 组件放在 DispatcherServlet 的 ApplicationContext,后者是前者的子 ApplicationContext,所以,子 ApplicationContext 可以读取父 ApplicationContext

    2020-01-23
    3
  • 码农Kevin亮
    请问小马哥,个人还是不太明白这个容器的层次关系的具体应用场景,在什么情况下才有必要构建这个树结构?

    作者回复: 容器的层次关系主要的目的是实现 Bean 复用,假设一个应用存在一个 Root ApplicationContext,内部的 Bean 来自于一个 jar 包,那么,这个jar 包可能被两个不同的 Servlet 应用使用,这时,ServletContext A 和 ServletContext B 同时复用了这个 parent ApplicationContext,而它自己也有 ApplicationContext,这也是 Spring Web MVC 所涉及的应用上下文架构。

    2020-03-06
    1
  • 勤劳的明酱
    根据BeanFactoryUtils#beansOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type)
    方法的描述
    such beans will be returned from the lowest factory that they are being found in,
    hiding corresponding beans in ancestor factories.</b> This feature allows for
    'replacing' beans by explicitly choosing the same bean name in a child factory;
    the bean in the ancestor factory won't be visible then, not even for by-type lookups.
    这里的意思应该是会选择子factory里的bean,而不是选择parentFactory里面的bean来解决冲突,在这个类里面不是类似双亲委派的选择方式,它们的设计初衷不一致

    作者回复: BeanFactory 的双亲委派和 ClassLoader 类似,和 Bean 冲突没有直接关系。 BeanFactoryUtils#beansOfTypeIncludingAncestors 仍旧是递归地查找指定类型的 Bean 集合,并且是在所有层次类查找,只不过该方法会排除子 BeanFactory 已存在的 Bean,这是一种就近原则的设计。

    2020-01-29
    5
    1
  • 囊子
    老师,为什么在SpringMVC中设计独立的ApplicationContext,是为了让SpringMVC能独立于Spring使用吗?为什么干脆不强依赖Spring弄成一个ApplicationContext,所以,只是为了这种组件模块化分离设计的考虑吗?

    作者回复: 在 Spring Framework(包括 SpringMVC) 确实是两个应用上下文,当初的设计主要是为了复用,Root ApplicationContext 使用 Biz 组件,而 DispatcherServlet 关联的 ApplicationContext 则是管理 Web 组件。不过在 Spring Boot 场景下,收敛到同一个 ApplicationContext 中了

    2020-02-17
  • will
    如果父子BeanFactory里存在相同名称的Bean,BeanFactoryUtils#beansOfTypeIncludingAncestors 方法好像是排除父亲BeanFactory里的Bean,返回子BeanFactory里的Bean吧

    作者回复: 是的,会派出,这个和 ClassLoader 类似

    2020-02-04
收起评论
看过的人还看
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

48讲 | 48125 人已学习

拼团 ¥79 原价 ¥99
玩转Spring全家桶

丁雪丰  平安壹钱包高级架构师,《Spring Boot实战》《Spring攻略》译者,InfoQ社区编辑

123讲 | 27071 人已学习

拼团 ¥99 原价 ¥129
Java核心技术面试精讲

杨晓峰  前Oracle首席工程师

43讲 | 44855 人已学习

拼团 ¥79 原价 ¥99
数据结构与算法之美

王争  前Google工程师

79讲 | 77000 人已学习

拼团 ¥79 原价 ¥99