2020面试题总结Spring篇_一目斋
Spring系列面试题(附答案)

Spring系列⾯试题(附答案)1、不同版本的 Spring Framework 有哪些主要功能?2、什么是 Spring Framework?Spring 是⼀个开源应⽤框架,旨在降低应⽤程序开发的复杂度。
它是轻量级、松散耦合的。
它具有分层体系结构,允许⽤户选择组件,同时还为 J2EE 应⽤程序开发提供了⼀个有凝聚⼒的框架。
它可以集成其他框架,如Structs、Hibernate、EJB 等,所以⼜称为框架的框架。
3、列举 Spring Framework 的优点。
由于 Spring Frameworks 的分层架构,⽤户可以⾃由选择⾃⼰需要的组件。
Spring Framework ⽀持 POJO(Plain Old Java Object) 编程,从⽽具备持续集成和可测试性。
由于依赖注⼊和控制反转,JDBC 得以简化。
它是开源免费的。
4、Spring Framework 有哪些不同的功能?轻量级 - Spring 在代码量和透明度⽅⾯都很轻便。
IOC - 控制反转AOP - ⾯向切⾯编程可以将应⽤业务逻辑和系统服务分离,以实现⾼内聚。
?容器 - Spring 负责创建和管理对象(Bean)的⽣命周期和配置。
MVC - 对 web 应⽤提供了⾼度可配置性,其他框架的集成也⼗分⽅便。
?事务管理- 提供了⽤于事务管理的通⽤抽象层。
Spring 的事务⽀持也可⽤于容器较少的环境。
JDBC 异常 - Spring的 JDBC 抽象层提供了⼀个异常层次结构,简化了错误处理策略。
5、Spring Framework 中有多少个模块,它们分别是什么?Spring 核⼼容器–该层基本上是Spring Framework 的核⼼。
它包含以下模块:· Spring Core· Spring Bean· SpEL (Spring Expression Language)· Spring Context数据访问/集成–该层提供与数据库交互的⽀持。
Spring面试题和答案(精品文档)_共23页

阅读目录∙ 1. 什么是spring?∙ 2. 使用Spring框架的好处是什么?∙ 3. Spring由哪些模块组成?∙ 4. 核心容器(应用上下文) 模块。
∙ 5. BeanFactory – BeanFactory 实现举例。
∙ 6. XMLBeanFactory ∙7. 解释AOP模块∙8. 解释JDBC抽象和DAO模块。
∙9. 解释对象/关系映射集成模块。
∙10. 解释WEB 模块。
∙12. Spring配置文件∙13. 什么是Spring IOC 容器?∙14. IOC的优点是什么?∙15. ApplicationContext通常的实现是什么?∙16. Bean 工厂和 Application contexts 有什么区别?∙17. 一个Spring的应用看起来象什么?∙18. 什么是Spring的依赖注入?∙19. 有哪些不同类型的IOC(依赖注入)方式?∙20. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?∙21.什么是Spring beans?∙22. 一个 Spring Bean 定义 包含什么?∙23. 如何给Spring 容器提供配置元数据?∙24. 你怎样定义类的作用域? ∙25. 解释Spring支持的几种bean的作用域。
∙26. Spring框架中的单例bean是线程安全的吗?∙27. 解释Spring框架中bean的生命周期。
∙28. 哪些是重要的bean生命周期方法? 你能重载它们吗?∙29. 什么是Spring的内部bean?∙30. 在 Spring中如何注入一个java集合?∙31. 什么是bean装配? ∙32. 什么是bean的自动装配?∙33. 解释不同方式的自动装配 。
∙34.自动装配有哪些局限性 ?∙35. 你可以在Spring中注入一个null 和一个空字符串吗?∙36. 什么是基于Java的Spring注解配置? 给一些注解的例子.∙37. 什么是基于注解的容器配置?∙38. 怎样开启注解装配?∙39. @Required 注解∙40. @Autowired 注解∙41. @Qualifier 注解∙42.在Spring框架中如何更有效地使用JDBC? ∙43. JdbcTemplate∙44. Spring对DAO的支持∙45. 使用Spring通过什么方式访问Hibernate? ∙46. Spring支持的ORM∙47.如何通过HibernateDaoSupport将Spring和Hibernate结合起来?∙48. Spring支持的事务管理类型∙49. Spring框架的事务管理有哪些优点?∙50. 你更倾向用那种事务管理类型?∙51. 解释AOP∙52. Aspect 切面∙52. 在Spring AOP 中,关注点和横切关注的区别是什么?∙54. 连接点∙55. 通知∙56. 切点∙57. 什么是引入? ∙58. 什么是目标对象? ∙59. 什么是代理?∙60. 有几种不同类型的自动代理?∙61. 什么是织入。
Spring面试专题及答案

以下为spring 常见面试问题:1、什么是Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为Java 应用程序的开发提供了综合、广泛的基础性支持的Java 平台。
Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring 框架,不必担心Spring 是如何在后台进行工作的。
Spring 框架至今已集成了20 多个模块。
这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。
2、使用Spring 框架能带来哪些好处?下面列举了一些使用Spring 框架带来的主要好处:∙Dependency Injection(DI) 方法使得构造器和JavaBean properties 文件中的依赖关系一目了然。
∙与EJB 容器相比较,IoC 容器更加趋向于轻量级。
这样一来IoC 容器在有限的内存和CPU 资源的情况下进行应用程序的开发和发布就变得十分有利。
∙∙∙Spring 并没有闭门造车,Spring 利用了已有的技术比如ORM 框架、logging 框架、J2EE、Q uartz 和JDK Timer,以及其他视图技术。
Spring 框架是按照模块的形式来组织的。
由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
要测试一项用Spring 开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。
更加简单的是,利用JavaBean 形式的POJO 类,可以很方便的利用依赖注入来写入测试数据。
∙∙Spring 的Web 框架亦是一个精心设计的Web MVC 框架,为开发者们在web 框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web 框架的以外的有力选项。
spring面试题目及答案

spring面试题目及答案一、介绍Spring框架Spring是一个开源的轻量级JavaEE框架,它提供了一系列的工具和特性,用于简化Java应用程序的开发。
Spring的核心特点包括依赖注入(DI)和面向切面编程(AOP),它还提供了许多其他功能,如事务管理、数据访问和集成等。
在面试过程中,面试官通常会对Spring框架有一定的了解,下面是一些常见的面试题目及它们的答案。
1. 请简要介绍一下Spring框架。
Spring是一个轻量级的JavaEE框架,它提供了一套全面的解决方案,用于开发Java应用程序。
Spring的核心特点包括依赖注入(DI)和面向切面编程(AOP),它还提供了很多其他功能,如事务管理、数据访问和集成等。
2. 什么是依赖注入(DI)?依赖注入是Spring框架的一个核心特性,通过它可以将类之间的依赖关系交由框架来管理。
DI可以通过构造函数、属性的方式来实现,它能够有效降低组件之间的耦合度,使代码更易于测试、维护和重用。
3. 什么是控制反转(IOC)?控制反转也是Spring框架的一个重要概念,它是实现依赖注入的基础。
IOC是一种设计原则,通过该原则,对象的创建和管理被反转到了容器中。
在Spring中,由容器负责创建、配置和管理对象的生命周期,开发人员只需要关注业务逻辑的实现。
4. 请简要说明一下Spring的AOP特性。
面向切面编程(AOP)是Spring框架的另一个核心特性,它允许开发人员将与业务逻辑无关的横切关注点(如日志、事务管理等)从核心业务逻辑中分离出来。
通过AOP,可以实现代码的重用、模块化和可维护性。
5. Spring提供了哪些常用的模块?Spring提供了很多模块,常用的有:- Spring Core:提供了DI和IOC容器的基本功能。
- Spring MVC:用于构建Web应用程序的框架。
- Spring Data:简化数据访问层的开发。
- Spring Security:用于身份验证和授权的安全框架。
spring面试问题与答案集锦

spring⾯试问题与答案集锦我收集了⼀些spring⾯试的问题,这些问题可能会在下⼀次技术⾯试中遇到。
对于其他spring模块,我将单独分享⾯试问题和答案。
如果你能将在以前⾯试中碰到的,且你认为这些应该是⼀个有spring经验的⼈可能被问到的问题发给我,我将不胜感激!我将把它们添加到这个列表中。
这将对其他学习者也会有很⼤的帮助。
1. 什么是Spring框架?它的主要模块有哪些?2. 使⽤Spring框架的好处是什么?3.什么是控制反转(IoC)和依赖注⼊?4. 在Spring框架中的IoC是怎么样⼦的 ?5. BeanFactory和ApplicationContext之间的区别?6. 将Spring配置到应⽤程序中的⽅式有哪些?7. 基于xml的Spring配置是什么样⼦的?8. 基于Spring java的配置是什么样⼦的?9. 基于Spring注解的配置是什么样⼦的?10. 请解释⼀下Spring Bean的⽣命周期?11. Spring Bean作⽤域的有哪些?12. Spring的内部Bean是什么?13. 在Spring框架中,单例bean线程安全吗?14. 如何在Spring中注⼊Java集合?请给个例⼦好吗?15. 如何将⼀个java.util.属性注⼊到Spring Bean?16. 解释⼀下Spring Bean的⾃动注⼊式什么样的?17. 请解释⼀下不同的bean⾃动注⼊模式?18. 怎么打开基于注释的⾃动注⼊的?19. 能否⽤例⼦解释⼀下@ required注解吗?20.能否⽤例⼦解释⼀下@ autowired注解吗?21. 能否⽤例⼦讲解⼀下@qualifier注解吗?22. 构造⽅法注⼊和setter注⼊之间的区别吗?23. spring框架的事件类型有哪些?24. FileSystemResource和ClassPathResource之间的区别吗?25. 列举⼀些Spring框架中使⽤的设计模式?1. Spring框架是什么?它的主要模块有哪些?Spring框架是⼀个Java平台,提供全⾯的基础设施⽀持开发Java应⽤程序。
spring常见的面试题

spring常见的面试题1. 介绍Spring框架Spring是一个开源的轻量级Java框架,用于开发企业级应用程序。
它通过依赖注入和面向切面编程等特性,简化了Java应用程序的开发。
Spring框架提供了容器来管理对象的生命周期并处理对象之间的依赖关系,同时还提供了一系列的模块,如Spring MVC、Spring Security等,用于支持各种应用场景。
2. 什么是依赖注入(Dependency Injection)?依赖注入是Spring框架的核心特性之一,它通过控制反转的方式,将对象之间的依赖关系交由容器来管理。
在依赖注入中,对象的依赖关系由容器动态地注入,在对象之间解耦。
这种方式可以提高代码的可读性、可维护性,并且方便进行单元测试。
3. 请说明Spring框架中的控制反转(IoC)和依赖注入(DI)之间的关系。
控制反转是一种设计原则,而依赖注入是实现控制反转的方式。
控制反转是指对象的创建和管理权由容器负责,而不是由应用程序自己创建和管理。
而依赖注入则是控制反转的具体实现方式,通过依赖注入,容器可以在创建对象时,将其所依赖的其他对象注入进来。
4. 请解释Spring框架中的Bean是什么?在Spring框架中,Bean是指被Spring容器管理和实例化的对象。
它们通常是应用程序的核心组件,用于执行具体的业务逻辑。
Bean可以配置为单例模式或多例模式,可以通过依赖注入来解决它们之间的依赖关系。
5. Spring框架中的AOP是什么?AOP(Aspect-Oriented Programming)即面向切面编程,是Spring框架的另一个重要特性。
AOP通过在不改变源代码的情况下,将横切关注点(如日志记录、性能统计等)从核心业务逻辑中抽离出来,并将其模块化。
这样可以提高代码的可复用性和可维护性。
6. Spring框架中的声明式事务是如何实现的?Spring框架中的声明式事务通过AOP来实现。
Spring面试题总结以及答案

Spring⾯试题总结以及答案请问什么是IoC和DI?并且简要说明⼀下DI是如何实现的?IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注⼊,是对IoC更简单的诠释。
控制反转是把传统上由程序代码直接操控的对象的调⽤权交给容器,通过容器来实现对象组件的装配和管理。
所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本⾝转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。
IoC体现了好莱坞原则 - "Don’t call me, we will call you"。
依赖注⼊的基本原则是应⽤组件不应该负责查找资源或者其他依赖的协作对象。
配置对象的⼯作应该由容器负责,查找资源的逻辑应该从应⽤组件的代码中抽取出来,交给容器来完成。
DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运⾏期决定,形象的来说,即由容器动态的将某种依赖关系注⼊到组件之中。
⼀个类A需要⽤到接⼝B中的⽅法,那么就需要为类A和接⼝B建⽴关联或依赖关系,最原始的⽅法是在类A中创建⼀个接⼝B的实现类C的实例,但这种⽅法需要开发⼈员⾃⾏维护⼆者的依赖关系,也就是说当依赖关系发⽣变动的时候需要修改代码并重新构建整个系统。
如果通过⼀个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好⽤于关联接⼝B的⽅法(构造器或setter⽅法),将类A和接⼝B的实现类C放⼊容器中,通过对容器的配置来实现⼆者的关联。
依赖注⼊可以通过setter⽅法注⼊(设值注⼊)、构造器注⼊和接⼝注⼊三种⽅式来实现,Spring⽀持setter注⼊和构造器注⼊,通常使⽤构造器注⼊来注⼊必须的依赖关系,对于可选的依赖关系,则setter注⼊是更好的选择,setter注⼊需要类提供⽆参构造器或者⽆参的静态⼯⼚⽅法来创建对象。
请说明⼀下springIOC原理是什么?如果你要实现IOC需要怎么做?请简单描述⼀下实现步骤?①IoC(Inversion of Control,控制倒转)。
Spring常见面试题总结

2020-6-17 Spring常见面试题总结蝌蚪成长记目录1、Spring是什么? (3)2、Spring 的优点? (3)3、谈谈你对Spring的AOP理解 (4)4、谈谈你对Spring的IoC理解: (5)5、BeanFactory和ApplicationContext有什么区别? (6)6、请解释Spring Bean的生命周期? (7)7、解释Spring支持的几种bean的作用域 (9)8、Spring框架中的单例Beans是线程安全的么? (9)9、Spring如何处理线程并发问题? (10)10、Spring基于xml注入bean的几种方式 (10)11、Spring的自动装配: (10)12、Spring事务的实现方式和实现原理 (12)13、Spring的事务传播行为理解 (12)14、Spring中的隔离级别 (13)15、Spring框架中有哪些不同类型的事件? (14)16、解释一下Spring AOP里面的几个名词 (14)17、Spring通知有哪些类型? (15)18、什么是Spring的依赖注入? (17)19、在 Spring中如何注入一个java集合? (17)20、Spring支持的ORM (17)21、Spring如何处理线程并发问题? (18)22、Spring 框架中都用到了哪些设计模式? (19)23、什么是spring 的内部bean? (19)24、描述一下DispatcherServlet 的工作流程 (20)25、@Component 和@Bean 的区别是什么? (21)1、Spring是什么?Spring是一个轻量级的IoC和AOP容器框架。
是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。
常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。
主要由以下几个模块组成:Spring Core:核心类库,提供IOC服务;Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Spring AOP:AOP服务;Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;Spring ORM:对现有的ORM框架的支持;Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;Spring MVC:提供面向Web应用的Model-View-Controller实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、讲讲Spring的加载流程。
这个有点长,,,建议大体读一遍spring源码。
可以参考这篇文章:Spring初始化加载流程分析2、Spring AOP的实现原理。
Spring AOP的面向切面编程,是面向对象编程的一种补充,用于处理系统中分布的各个模块的横切关注点,比如说事务管理、日志、缓存等。
它是使用动态代理实现的,在内存中临时为方法生成一个AOP对象,这个对象包含目标对象的所有方法,在特定的切点做了增强处理,并回调原来的方法。
Spring AOP的动态代理主要有两种方式实现,JDK动态代理和cglib动态代理。
JDK动态代理通过反射来接收被代理的类,但是被代理的类必须实现接口,核心是InvocationHandler和Proxy类。
cglib动态代理的类一般是没有实现接口的类,cglib是一个代码生成的类库,可以在运行时动态生成某个类的子类,所以,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。
3、讲讲Spring事务的传播属性。
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作。
如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
事务的传播行为,指的是当前带有事务配置的方法,需要怎么处理事务。
例如,方法可以继续在当前事务中运行,也可能开启一个新的事务,并在自己的事务中运行。
有一点需要注意,事务的传播级别,并不是数据库事务规范中的名词,而是Spring自身所定义的。
通过事务的传播级别,Spring才知道如何处理事务,是创建一个新的事务,还是继续使用当前的事务。
在TransactionDefinition接口中,定义了三类七种传播级别。
如下://TransactionDefinition.java//==========支持当前事务的情况==========/***如果当前存在事务,则使用该事务。
*如果当前没有事务,则创建一个新的事务。
*/int PROPAGATION_REQUIRED=0;/***如果当前存在事务,则使用该事务。
*如果当前没有事务,则以非事务的方式继续运行。
*/int PROPAGATION_SUPPORTS=1;/***如果当前存在事务,则使用该事务。
*如果当前没有事务,则抛出异常。
*/int PROPAGATION_MANDATORY=2;//==========不支持当前事务的情况==========/***创建一个新的事务。
*如果当前存在事务,则把当前事务挂起。
*/int PROPAGATION_REQUIRES_NEW=3;/***以非事务方式运行。
*如果当前存在事务,则把当前事务挂起。
*/int PROPAGATION_NOT_SUPPORTED=4;/***以非事务方式运行。
*如果当前存在事务,则抛出异常。
*/int PROPAGATION_NEVER=5;//==========其他情况==========/***如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。
*如果当前没有事务,则等价于{@linkTransactionDefinition#PROPAGATION_REQUIRED}*/int PROPAGATION_NESTED=6;当然,绝大数场景下,我们是只用到PROPAGATION_REQUIRED传播级别的。
需要注意的是,以PROPAGATION_NESTED启动的事务内嵌于外部事物(如果存在外部事务的话),此时,内嵌事务并不是一个独立的事务,它依赖于外部事务的存在,只有通过外部的事务提交,才能引起内部事务的提交,嵌套的子事务不能单独提交。
这点类似于JDBC中的保存点(SavePoint)概念,嵌套的子事务就相当于保存点的一个应用,一个事务中可以包括多个保存点,每一个嵌套子事务。
另外,外部事务的回滚也会导致嵌套子事务的回滚。
参考链接:可能是最漂亮的Spring事务管理详解4、Spring如何管理事务的,怎么配置事务。
所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。
Spring提供两种类型的事务管理:声明式事务,通过使用注解或基于XML的配置事务,从而事务管理与业务代码分离。
编程式事务,通过编码的方式实现事务管理,需要在代码中显示的调用事务的获得、提交、回滚。
它提供了极大的灵活性,但维护起来非常困难。
实际场景下,我们一般使用SpringBoot+注解(@Transactional)的声明式事务。
Spring的声明式事务管理建立在AOP基础上,其本质是在目标方法执行前进行拦截,在方法开始前创建一个事务,在执行完方法后根据执行情况提交或回滚事务。
声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不用侵入业务代码,只需要在配置文件中做相关的事物声明就可将业务规则应用到业务逻辑中。
和编程式事务相比,声明式事务唯一的不足是只能作用到方法级别,无法做到像编程式事务那样到代码块级别。
具体可以去看Spring事务管理-编程式事务、声明式事务。
5、说说你对Spring的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop的实现原理,说说aop中的几个术语,它们是怎么相互工作的。
在bean的scope属性中,当值是singleton表示单例,当值是prototype表示多例。
单例:多次用factory.getBean("user",user.class)获取实体类,获得是同一类。
多例:多次用factory.getBean("user",user.class)获取实体类,获得是多个类。
6、Spring MVC中DispatcherServlet工作流程。
DispatcherServlet工作流程可以用一幅图来说明。
①发送请求用户向服务器发送HTTP请求,请求被Spring MVC的调度控制器DispatcherServlet捕获。
②映射处理器DispatcherServlet根据请求URL,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExectuionChain对象的形式返回。
③处理器适配DispatcherServlet根据获得Handler,选择一个合适的HandlerAdapter。
(如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler()方法)提取请求Request中的模型数据,填充Handler入参,开始执行Handler (Controller)。
在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:∙HttpMessageConverter:会将请求信息(如JSON、XML等数据)转换为一个对象。
∙数据转换:对请求消息进行数据转换,如String转换为Integer、Double等。
∙数据格式化:对请求消息进行数据格式化,如将字符串转换为格式化数字或格式化日期等。
∙数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或error中。
(自定义验证机制需要使用注解@InitBinder)Handler(Controller)执行完成后,向DispatcherServlet返回一个ModelAndView对象。
当然,如果判断方法中有@ResponseBody注解,则直接将结果写回用户浏览器。
图中没有④。
⑤解析试图根据返回的ModelAndView,选择一个合适的ViewResolver(必须是已经注册到Spring容器中的ViewResolver),解析出View对象,然后返回给DispatcherServlet。
⑥⑦渲染视图+相应请求ViewResolver结合Model和View,来渲染视图,并写回给用户浏览器。
7、Spring MVC用到的注解,作用是什么,原理。
在Spring MVC中主要用到以下注解:∙@Controller注解,它将一个类标记为Spring Web MVC控制器Controller。
∙@RestController注解,在@Controller注解的基础上,增加了@ResponseBody注解,更加适合目前前后端分离的架构下,提供Restful API,返回例如JSON数据格式。
当然,返回什么样的数据格式,根据客户端的“ACCEPT”请求头来决定。
∙@RequestMapping注解,用户将特定的HTTP请求方法映射到将处理相应请求的控制器的特定类/方法。
此注释可应用于两个级别,一是类级别,映射请求的URL;另一个是方法级别,映射URL以及HTTP请求方法。
∙@GetMapping注解,相当于是@RequestMapping的GET请求方法的特例,目的是为了提高清晰度。
并且仅可注册在方法上。
8、Spring boot启动机制。
Spring Boot启动时的关键步骤,主要在两个方面:∙SpringApplication实例的构建过程,其中主要涉及到了初始化器(Initializer)以及监听器(Listener)这两大概念,它们都通过META-INF/spring.factories完成定义。
∙SpringApplication实例run方法的执行过程,其中主要有一个SpringApplicationRunListeners的概念,它作为Spring Boot容器初始化时各阶段事件的中转器,将事件派发给感兴趣的Listeners(在SpringApplication实例的构建过程中得到的)。
强烈建议直接去看这篇文章:[Spring Boot]1.Spring Boot启动过程源码分析注意,这篇文章没有讲关于IOC的东西。
这块需要自己补充。
9、Spring中用到的设计模式。
Spring在设计中用了几种常用的设计模式。
a,工厂模式在Spring中我们一般是将Bean的实例化直接交给容器去管理的,实现了使用和创建的分离,这时容器直接管理对象,还有种情况是,bean的创建过程我们交给一个工厂去实现,而Spring容器管理这个工厂。
Spring使用工厂模式可以通过BeanFactory或ApplicationContext创建bean对象。
两者对比如下:∙BeanFactory:延迟注入(使用到某个bean的时候才会注入),相比于ApplicationContext来说会占用更少的内存,程序启动速度更快。
∙ApplicationContext:容器启动的时候,不管bean是否用到,一次性创建所有的bean。