一、Java基础
1、名词解释
JDK:Java Development Kit,Java 软件开发工具包。
JRE:Java Runtime Environment,Java 运行环境。
JVM:Java Virtual Machine,Java 虚拟机。
2、JDK的版本
JavaEE:Java Enterprise Edition,Java 企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
JavaSE:Java Standard Edition,Java 标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
JavaME:Java Micro Edition,Java 微型版,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
二、Spring简介
Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架
。Spring核心是IOC
和AOP
。
IOC 可以帮助我们管理对象的依赖关系,极大减少对象的耦合性,而 AOP 的切面编程功能可以更方面的使用动态代理来实现各种动态方法功能(如事务、缓存、日志等)。
Spring主要优点包括:
①方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
②AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
③声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
④方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
⑤方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
①核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
②Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
③Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。
④Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
⑤Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
⑥Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
⑦Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
三、SpringBoot
1、SpringBoot简介
SpringBoot是一个集成了Spring技术栈的一个大整合,是一个简化了Spring应用开发的框架,可以一站式解决J2EE的开发流程。
Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置。
Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目。
2、SpringBoot特性
➢能够快速创建基于 Spring 的应用程序
➢ 能够直接使用 java main 方法启动内嵌的 Tomcat 服务器运行 Spring Boot 程序,不需要部署 war 包文件
➢ 提供约定的 starter POM 来简化 Maven 配置,让 Maven 的配置变得简单
➢ 自动化配置,根据项目的 Maven 依赖配置,Spring boot 自动配置 Spring、Spring mvc
等
➢ 提供了程序的健康检查等功能
➢ 基本可以完全不使用 XML 配置文件,采用注解配置
3、SpringBoot核心组件
SpringBoot的三大核心组件:Spring Boot Starter、Spring Boot Autoconfigure和Spring Boot Actuator。
① Spring Boot Starter:一种便捷的依赖管理工具,它可以帮助我们快速地搭建SpringBoot项目。通过使用Starter,我们可以轻松地引入所需的依赖,而无需手动添加大量的Maven或Gradle配置。
Spring Boot Starter的主要作用是简化项目的依赖管理。它将常用的依赖进行了预先整合,使得我们可以通过简单地引入一个Starter,就能够获得一系列相关的依赖。这样,我们可以避免手动添加大量的依赖配置,从而提高开发效率。
要使用Spring Boot Starter,我们只需在项目的pom.xml文件中添加相应的Starter依赖即可。例如,如果我们想要使用Spring Boot的Web功能,可以添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
②Spring Boot Autoconfigure:Spring Boot Autoconfigure是SpringBoot的一个重要特性,它可以根据项目中的依赖自动进行配置。通过使用Autoconfigure,我们可以避免编写大量的配置代码,从而提高开发效率。
Spring Boot Autoconfigure的主要作用是实现自动配置。它会根据项目中的依赖,自动为我们生成相应的配置。例如,如果我们在项目中引入了spring-boot-starter-web依赖,那么SpringBoot会自动为我们配置一个嵌入式的Tomcat服务器。
要使用Spring Boot Autoconfigure,我们无需进行任何额外的操作。只要我们引入了相应的Starter依赖,SpringBoot就会自动进行配置。
③Spring Boot Actuator:一个用于监控和管理SpringBoot应用的组件。通过使用Actuator,我们可以轻松地获取应用的运行状态、性能指标等信息。
Spring Boot Actuator的主要作用是提供应用的监控和管理功能。它提供了一系列的端点(Endpoint),我们可以通过这些端点获取应用的各种信息,如运行状态、性能指标、环境变量等。此外,Actuator还支持自定义端点,以满足特定需求。
要使用Spring Boot Actuator,我们需要在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后,我们可以通过访问相应的端点来获取应用的信息。例如,要查看应用的运行状态,可以访问/actuator/health
端点。
4、流程
Springboot启动时,第一件重要事件就是初始化SpringApplication,并主要完成如下事情。
- 设置源。实际就是设置Spring容器启动时依赖的初始配置类,也就是Springboot中的启动类;
- 设置WEB应用程序类型。例如可以是SERVLET,REACTIVE等;
- 加载并设置Bootstrapper,ApplicationContextInitializer和ApplicationListener;
- 设置应用程序主类的Class对象。
然后Springboot启动时还会开启事件机制,主要就是通过运行时监听器EventPublishingRunListener创建事件并分发给对应的ApplicationListener。
再然后会加载外部化配置,也就是得到很重要的Environment对象,通过Environment对象就可以拿到Springboot加载的所有外部化配置。
再然后会完成容器刷新,也就是执行Spring中的各种扩展点,初始化各种bean,这部分逻辑属于是Spring的逻辑,故本文并未详细介绍。除此之外,在容器刷新时,还会完成WEB容器的启动,例如启动Springboot内嵌的Tomcat,这部分内容比较多,会在后面单独进行分析。
最后,Springboot在整个启动流程中,会借助事件机制来发布各种事件,发布事件就是借助于上述提到的EventPublishingRunListener,这是一个运行时监听器,是Springboot中提供的监听器,不要和Spring中的ApplicationListener混淆了。