Spring框架知识总结

目录

1、Spring框架有哪些设计模式?

2、介绍一下Spring框架和SpringBoot框架?

3、介绍一下SpringBoot具有哪些功能模块?

4、Spring用到了什么组件?

5、什么是IoC?   什么是AOP?

6、SpringBoot运行原理?有哪些类?以什么顺序执行?

7、SpringBoot启动流程?

8、对于SpringBoot和SpringMVC的理解?

9、Spring常用注解?

10、Spring的注入的底层原理是什么?


1、Spring框架有哪些设计模式?

1.单例模式:

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了一个全局访问点。在 Spring 中,Bean 默认是单例的,这意味着每个 Bean 只会被创建一次,并且可以在整个应用程序中共享

单例模式的实现方式有饿汉模式懒汉模式两种。

饿汉模式(线程安全):在类加载时就创建实例对象,保证在整个程序生命周期内只存在一个实例,所以在多线程环境下也能保持唯一性。

懒汉模式(线程不安全):非必要不加载,只有在第一次使用时创建单例对象,避免在类加载时就创建对象。如果有多个线程同时创建实例对象,就有可能产生线程不安全的情况。

2.工厂模式:
它提供了一种创建对象的方式,使得应用程序可以更加灵活和可维护。Spring 提供了多种工厂模式,如 BeanFactory 和 ApplicationContext 等,通过这些工厂可以创建和管理对象的实例。

3.代理模式:

代理模式是一种结构型设计模式,它允许开发人员在不修改原有代码的情况下,向应用程序中添加新的功能。在 Spring AOP(面向切面编程)就是使用代理模式的实现,它允许开发人员在方法调用前后执行一些自定义的操作,比如日志记录、性能监控等

4.观察者模式:
Spring 事件机制就是基于观察者模式实现的,通过事件源和监听器来实现对象之间的解耦。

5.适配器模式:
适配器模式是一种结构型设计模式,它允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。在 Spring 中,适配器模式常用于将不同类型的对象转换成统一的接口。

2、介绍一下Spring框架和SpringBoot框架?

Spring

        Spring 是一个轻量级的开源框架,它提供了一种简单的方式来构建企业级应用程序。Spring 框架的核心是 IoC 和 AOP 两个概念。

IoC 是一种设计模式,它将对象的创建和依赖关系的管理从应用程序代码中分离出来,使得应用程序更加灵活和可维护。

AOP 是一种编程范式,它允许开发人员在不修改原有代码的情况下,向应用程序中添加新的功能。

Spring 框架提供了很多模块,包括核心容器、数据访问、Web、AOP、消息、测试等。开发人员可以根据自己的需求选择合适的模块来构建应用程序。

Spring Boot

        Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,为更快、更高效的开发 Spring 提供更加有力的支持。 Spring Boot 也提供了很多特性,包括自动配置、嵌入式 Web 服务器、健康检查、度量指标、安全性等。开发人员可以通过使用 Spring Boot Starter 来快速集成常用的第三方库和框架,比如 Spring Data、Spring Security、MyBatis、Redis 等

Spring Boot 是一个基于 Spring 框架的快速开发框架,它有以下优点:

  1. 快速集成框架,Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。
  2. 内置运⾏容器,⽆需配置 Tomcat 等 Web 容器,直接运⾏和部署程序。
  3. 快速部署项⽬,⽆需外部容器即可启动并运⾏项⽬。
  4. 可以完全抛弃繁琐的 XML,使⽤注解和配置的⽅式进⾏开发。
  5. ⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况。
     
  6. SpringBoot的核心:
                                   1、快速添加依赖
                                   2、内置web容器
                                    3、自动装配(即SpringBoot自动构建复杂对象,构建好的对象可以直接使用)


     

        Spring Boot 项⽬的⼀大特点:约定⼤于配置。较于Spring需要配置Bean的扫描路径,而SpringBoot就不需要

3、介绍一下SpringBoot具有哪些功能模块?

  1. 自动配置模块:自动配置根据项目中引入的依赖和应用程序的环境自动配置Spring应用程序。它大大减少了繁琐的配置过程。

  2. 起步依赖模块:Spring Boot提供了许多预配置的起步依赖,可以轻松添加常用的功能模块。例如,你可以通过添加spring-boot-starter-web起步依赖来快速构建Web应用程序。

  3. 嵌入式Web服务器模块:Spring Boot集成了嵌入式的Web服务器,如Tomcat、Jetty、Undertow等,可以使应用程序成为自包含的可执行JAR文件。

  4. 配置管理模块:Spring Boot简化了配置管理,可以使用属性文件、YAML文件、环境变量等来配置应用程序。

  5. 日志管理模块:Spring Boot集成了常见的日志框架,如Logback、Log4j2等,可以方便地配置和管理日志输出。

SpringBoot模块中操作数据库的模块是Spring Data JPA

4、Spring用到了什么组件?

  1. Spring Boot:Spring Boot是Spring框架的扩展,提供了自动配置和快速启动功能,简化了应用程序的开发和部署过程。

  2. Spring MVC:Spring MVC是一个基于模型-视图-控制器(MVC)设计模式的Web框架,用于构建Web应用程序。它提供了处理请求和响应的控制器、视图解析器等组件。

  3. Spring Data:Spring Data是一个简化数据库访问的组件,提供了对关系型数据库和NoSQL数据库的统一访问方式,包括Spring Data JPA、Spring Data JDBC、Spring Data MongoDB等子项目。

  4. Spring AOP:Spring AOP(面向切面编程)是一种编程范式,用于实现横切关注点的模块化。它可以将通用的横切逻辑(例如日志、事务管理等)与其他模块分离开来。

  5. Spring Core(核心):Spring Core是Spring框架的核心组件,提供了IoC(控制反转)和DI(依赖注入)容器,用于管理应用程序中的对象和依赖关系。

5、什么是IoC?   什么是AOP?

        IoC的含义是控制反转,举个汽车例子可以更好的帮助我们理解何为控制反转。

构建⼀辆⻋(Car Class),然⽽⻋需要依赖⻋身,⽽⻋身需要依赖底盘,⽽底盘需要依赖轮胎,由上往下一层层实现; 

一种汽车型号的轮胎尺寸大小是固定的,当需要生产不同尺寸大小的轮胎尺寸时,此时就需要由上到下修改轮胎尺寸参数,十分繁琐。为此我们转换思路,将原来由⾃⼰创建的下级类,改为传递的⽅式(也就是注⼊的⽅式),因为我们不需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。
 

IoC容器的优点:实现了代码的解耦,无需关注代码实现的细节

        AOP见下图所示:

        

AOP的好处包括:

  • 降低代码的重复性:相同的横切关注点逻辑可以在多个地方重用,减少了代码冗余。
  • 提高代码的可维护性:将横切关注点从核心业务逻辑中分离出来,使代码更加清晰和易于理解。
  • 提高代码的可重用性:切面的逻辑可以独立于核心业务逻辑进行修改和扩展,提高了代码的可重用性。
  • 改善代码的灵活性和可扩展性:通过配置切面,可以动态地增加、删除或修改横切关注点的逻辑,而无需修改核心AOP是面向切面编程的缩写。

6、SpringBoot运行原理?有哪些类?以什么顺序执行?

SpringBoot是一个基于Spring框架的快速开发脚手架,它的运行原理可以简单概括为以下几个步骤:

  1. SpringBoot的启动类是@SpringBootApplication注解标注的类,它会自动扫描同级包及其子包下的所有类,将它们作为Spring Bean进行加载。

  2. SpringBoot会根据classpath下的配置文件(application.properties或application.yml)来配置应用程序的行为,例如端口号、数据库连接等。

  3. SpringBoot会根据依赖关系自动配置应用程序的各种组件,例如WebMvc、JdbcTemplate等。

  4. SpringBoot会根据配置文件中的信息来启动内嵌的Tomcat、Jetty或Undertow等Web容器,将应用程序部署到Web容器中。

  5. 应用程序启动后,SpringBoot会自动运行所有实现了CommandLineRunner接口的Bean,这些Bean可以用来执行一些初始化操作。

Spring Boot 的底层原理主要涉及以下几个关键类和组件:

  1. SpringApplication:这是启动过程的起点。首先会创建一个新的SpringApplication实例,并解析传入的命令行参数。
  2. SpringApplicationRunListeners:这个类处理Spring Boot应用程序的启动和关闭事件,比如监听器会根据应用程序的不同阶段执行自定义逻辑。
  3. Environment:通过Environment对象加载配置文件中的设置,并根据这些设置调整应用程序的行为。
  4. SpringApplicationContext:一旦创建了SpringApplication实例,就会创建一个新的SpringApplicationContext实例,该实例会加载应用程序的Bean和相关的依赖关系。
  5. ApplicationContextRunner:这个类负责执行在创建ApplicationContext时注册的ApplicationContextInitializer。
  6. WebServer:对于Web应用程序,Spring Boot会启动一个嵌入式Web服务器(如Tomcat或Jetty),该服务器负责处理HTTP请求和响应。

7、SpringBoot启动流程?

        

Spring Boot启动流程大致如下:

  1. 加载Spring Boot应用的配置文件,包括application.properties或application.yml等。
  2. 创建并配置Spring应用上下文(ApplicationContext),包括扫描并加载Bean定义、配置Bean之间的依赖关系等。
  3. 注册Spring Boot内置的各种组件,如自动配置、自动装配、自动扫描等。
  4. 执行各种自定义的初始化操作,如注册自定义的Bean、配置拦截器、过滤器等。
  5. 启动内嵌的Servlet容器(如Tomcat、Jetty等),并将Spring应用上下文部署到Servlet容器中。
  6. 启动完成,监听请求并处理业务逻辑。

总的来说,Spring Boot的启动流程主要包括加载配置、创建Spring应用上下文、注册组件、执行初始化操作和启动内嵌的Servlet容器等步骤。

8、对于SpringBoot和SpringMVC的理解?

 SpringBoot的理解:

        Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,可以理解为创建Spring框架的脚手架,大大提高了创建Spring项目的效率。同时SpringBoot框架还具备了约定大于配置的特点。

 Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。
                Spring Boot 翻译⼀下就是 Spring 脚⼿架,就是为了快速开发 Spring 框架⽽诞⽣的
                 Spring Boot 项⽬的⼀大特点:约定⼤于配置。较于Spring需要配置Bean的扫描路径,而SpringBoot就不需要。

 SpringMVC的理解:

        Spring MVC是一个基于Java的Web框架,用于开发Web应用程序。它基于MVC(Model-View-Controller)设计模式,将应用程序的逻辑分为模型(Model)、视图(View)和控制器(Controller)三个部分,以实现代码的分离和模块化。

Spring MVC的工作流程如下:

  1. 客户端发送一个HTTP请求到服务器。
  2. 前端控制器(DispatcherServlet)接收到请求,并负责请求的分发和处理。
  3. 根据请求的URL,前端控制器将请求发送给合适的控制器(Controller)。
  4. 控制器处理请求,执行相应的业务逻辑,并可能访问数据库或其他外部服务。
  5. 控制器将处理结果封装为模型(Model)对象,交给视图解析器(View Resolver)。
  6. 视图解析器根据控制器返回的模型和视图的名称,找到对应的视图(View)。
  7. 视图负责渲染模型数据,并生成最终的响应内容。
  8. 响应内容通过前端控制器发送给客户端。

Spring MVC的特点和优势包括:

  1. 灵活性:Spring MVC以松散耦合的形式组织代码,可以与其他Spring框架集成,并可以与多种视图技术(如JSP、Thymeleaf、Freemarker等)搭配使用。

  2. 易于测试:通过使用MVC模式,控制器(Controller)和模型(Model)可以独立于视图(View)进行测试,提高了代码的可测试性。

  3. 强大的请求处理:Spring MVC提供了灵活的请求映射和处理机制,可以根据URL、请求参数、请求方法等进行精确匹配,并提供了丰富的支持RESTful风格的请求处理。

  4. 国际化和本地化支持:Spring MVC提供了多语言和多区域的支持,可以根据用户的语言和地区自动切换视图和文本资源。

  5. 强大的数据绑定和表单处理:Spring MVC支持数据绑定,可以将请求参数自动绑定到控制器中的Java对象,并提供了表单验证和错误处理的功能。

  6. 安全性:Spring MVC集成了Spring Security框架,可以方便地实现用户认证和授权功能。


9、Spring常用注解?

   

         详细注解见此篇文章:Spring常见注解

10、Spring的注入的底层原理是什么?

        在Spring框架中,注入的底层原理主要基于反射依赖注入(DI)两个关键技术:

         1、反射:Spring使用Java的反射机制来实现依赖注入。通过反射,Spring可以在运行时动态地获取类的信息,包括构造函数、字段、方法等。

                        这使得 Spring能够在不依赖编译时信息的情况下,动态地注入依赖对象。

         2、依赖注入(DI):依赖注入是一种设计模式,它将对象的创建和依赖关系的管理从应用程序代码中分离出来,使得应用程序更加灵活和可维护。

                                      在 Spring 框架中,当容器创建一个对象时,依赖注入会检查该对象的依赖关系,并使用反射机制查找依赖对象。然后容器将依赖对象注入到该对象中。

                                     依赖注入的实现三种方式:

                                     1:属性注入:通过反射,Spring直接将依赖对象注入到Bean的字段中,即直接对Bean对象的字段赋值。

                                     2:Setter注入:Spring容器在实例化Bean之后,通过反射调用Bean中对应的Setter方法来注入所需的依赖对象。

                                     3:Spring容器通过反射调用目标Bean的构造函数,将依赖对象作为构造函数的参数传递进去。

        一句话总结Spring注入的底层原理就是:当 Spring 容器启动时,它会扫描应用程序中的所有 Bean,并将它们存储在一个 BeanFactory 中。当 Spring 容器需要注入某个 Bean 时,Spring 容器会使用 Java 反射机制来查找符合条件的 Bean,并将其注入到应用程序中。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值