- 面试时源码讲到的程度,每步做什么事情。比如 bean 实例化经过哪些过程、什么时候填充属性;
- 注解是只个标记,生效的是注解解析器,注解的含义是通过解析器来实现的;
- 一级缓存存的是已实例化和初始化完成的完成品对象,初始化完成指对象中的属性已赋值;
- 二级缓存和三级缓存存的是已实例化,但未初始化的对象,即对象的属性未赋值;
- 二级缓存与三级缓存区别,二级缓存存的是(半成品)对象的代理引用,三级缓存存的是(半成品)对象的引用;
- 需要做扩展时才会从三级缓存放到二级缓存,不做扩展时,当对象的属性都赋值完成,从半成品变为完成品时,会从三级缓存到一级缓存;
- 到 P7 、P8 才会问循环依赖的问题;
- 动态代理可以嵌套执行,即将代理对象中为参数,为其创建新的代理对象,调用 invoke 方法;
- Spring Bean 定义,执行了后置处理器,走完整个 refresh() 流程,完成实例化和初始化的;
- 自定义注解,使用反射实现;
- ThreadLocal,使用副本空间来保证线程安全性;
- Thread 有个重要属性为 ThreadLocalMap,该 map 存储当前线程的变量;
- 每个线程 Thread 都有各自的 ThreadLocalMap;
- 存取变量时,先获取当前线程的 ThreadLocalMap,存储到该线程的 map。
- SpringMVC 为单独功能,也包含容器,为 webApplicationContext,可脱离 Spring 单独运行。整合时会有两个容器,Spring 的容器为 ApplicationContext,SpringMVC 的容器为 webApplicationContext;
- ConfigurationClassPostProcessor 为后置处理器,可解析多个注解,比如 componentScan、bean、propertySource;
- AuwoiredAnnotationBeanPostProcessor 为后置处理器,解析 autowired;
- 在 postProcessProperties 方法中,会调用 metaData.inject 方法;
- @Autowired 标注在属性上,执行 field.set() 进行注入;
- @Autowired 标注在方法上,执行 method.invoke() 进行注入;
- ConfigurationClassPostProcessor 和 AuwoiredAnnotationBeanPostProcessor 很重要,需熟悉;
- context.getBeanDefinitionNames(),可获取容器内注入了哪些对象;
- 异步处理,会为当前对象创建代理对象,是在后置处理中执行的,不是在三级缓存的流程中,即没法使用三级缓存,所以不能处理循环依赖;
- idea 不推荐在 Field 上使用 @Autowired,而是推荐在 setter 方法上(另一个没听清);
- Spring 优雅的设计;
- 最典型的是模块化。完成 AOP 添加 AOP 的 jar 包,每个功能为一个模块;
- 接口单一职责原则,每个接口只负责单一功能实现;
- 接口隔离,不同接口不同功能。通过后缀可知该类的功能,比如 xxfactory 为工厂类,xxhandler 为处理器;
- Spring 的 Bean 生命周期有多个接口调用,某个接口不实现,则跳过;
- Spring 扫描,ClassPathScanningCandidateComponentProvider#scanCandidateComponents;
- 扫描所有 classes,获取所有 Resource 资源;
- 遍历 Resource,获取元数据 metadataReader;
- 解析,看是否有 @@ComponentScan,定义 ScannedGenericBeanDefinition;
- 返回 BeanDefinition,后面会完成 BeanDefinition 的注册,注册到容器中。
- Spring 的后置处理器,实际生产环境没应用;
- Spring AOP 可实现项目里多数据源动态切换功能,拦截后使用 if 条件判断;
- 自动装配的局限性,指向不明。@Autowired 默认按类型指定,@Qualifier 按名字指定,可配合 @Qualifier 执行;
- Spring 不支持分布式,可加上 EJB 分布式技术。SpringCloud 可完成分布式;
- 注解和 xml 都配置了,名字相同,后一个对象会覆盖前一个。在 DefaultListableBeanFactory 类中的属性 allowBeanDefinitionOverriding=true,即默认会覆盖;
- Sprint 条件注解,只有一个 @Condition。 SpringBoot 会在其基础上写 @ConditionOnClass,后续 SpringBoot 课程说明;
- Spring 编程式事务,try{} catch{},try 提交事务,异常回滚事务,对代码侵入性高;
- Spring 的设计模式,单例(getSingleton)、工厂(BeanFactory)、策略(资源类 Resource,有不同子类实现对不同请求的调用,比如 xml 文件调用 xml 的 Resource,url 调用 url 的 Resource)、装饰(xxHolder)、代理、适配器;
- 跳大厂的必备条件;
- 基础牢靠,原理理解,比如数据结构、NIO 这些;
- 实际经验丰富,高并发、线程池经验、性能瓶颈的优化;
- cglib 动态代理的实现原理,基于继承的方式, super 父类方法来实现;
- 大厂使用 Spring 框架,搭配主流框架。传统为 SSM,分布式为 SpringBoot + SpringCloud;
- Spring 没法管理 Servlet,其初始化流程由 Tomcat 负责;
- Spring 启动只有一个线程,但操作访问 Spring,比如创建对象时会有多个线程,所以使用 ConcurrentHashMap;
Spring IOC AOP相关知识点
最新推荐文章于 2024-01-10 21:15:15 发布