Spring Boot 相关知识

Spring Boot是什么

了解Spring Boot之前要先知道Spring。

Spring 是重量级企业开发框架 Enterprise JavaBean(EJB) 的替代品,Spring 通过简单的 依赖注入 和 面向切面编程 ,用简单的 Java 对象(Plain Old Java Object,POJO) 实现了 EJB 的功能。

虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的(例如需要大量 XML 配置)

于是诞生了Spring Boot ,它可以轻松创建独立的生产级基于 Spring 的应用程序,只要通过 “just run”(可能是 run ‘Application’或 java -jar 或 tomcat 或 maven 插件 run 或 shell 脚本)便可以运行项目。大部分 Spring Boot 项目只需要少量的配置即可。Spring Boot相当于免除复杂配置的Spring。

Spring Boot 的主要优点

在使用Spring框架进行开发的过程中,需要配置很多Spring框架包的依赖,如spring-core、spring-bean、spring-context等,而这些配置通常都是重复添加的,而且需要做很多框架使用及环境参数的重复配置,如开启注解、配置日志等。Spring Boot致力于弱化这些不必要的操作,提供默认配置,当然这些默认配置是可以按需修改的,快速搭建、开发和运行Spring应用。

  1. Spring Boot 项目所需的开发效率快。
  2. 很容易地与 Spring 生态系统集成,如 Spring JDBC、Spring ORM、Spring Data、Spring Security 等。
  3. Spring Boot 应用程序提供嵌入式 HTTP 服务器,如 Tomcat 和 Jetty,可以轻松地开发和测试 web 应用程序。
  4. Spring Boot 提供命令行接口(CLI)工具,用于开发和测试 Spring Boot 应用程序,如 Java 或 Groovy。
  5. Spring Boot 提供了多种插件,可以使用内置工具(如 Maven 和 Gradle)开发和测试 Spring Boot 应用程序。

Spring Boot 项目结构

Spring Boot 项目结构

以 Application 为后缀名的 Java 类一般就是 Spring Boot 的启动类,例如图上HelloWorldApplication 。Spring Boot 本身就嵌入 servlet 容器的缘故,所以可以直接运行。

Spring相关知识

spring容器

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。
Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。

BeanFactory是一种spring容器,它可以创建、获取Bean。它利用BaenDefinition来生成Bean对象。

依赖注入

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。
通常,依赖注入可以通过三种方式完成,即:

  • 构造函数注入
  • setter 注入
  • 接口注入

Bean生命周期

Bean的生命周期是由容器来管理的。主要在创建和销毁两个时期。
创建过程

  1. BaenDefinition-Bean的定义
  2. 构造方法推断-选出一个构造方法
  3. 实例化-构造方法反射得到对象
  4. 属性填充-给属性进行自动填充(依赖注入)
  5. 初始化-对其他属性赋值、校验
  6. 初始化后-AOP、生成代理对象

首先实例化Bean,并设置Bean的属性,根据其实现的Aware接口(主要是BeanFactoryAware接口,BeanFactoryAware,ApplicationContextAware)设置依赖信息,【3】接下来调用BeanPostProcess的postProcessBeforeInitialization方法,完成initial前的自定义逻辑;afterPropertiesSet方法做一些属性被设定后的自定义的事情;【5】调用Bean自身定义的init方法,去做一些初始化相关的工作;【6】然后再调用postProcessAfterInitialization去做一些bean初始化之后的自定义工作。这四个方法的调用有点类似AOP。此时,Bean初始化完成,可以使用这个Bean了。
销毁过程
如果实现了DisposableBean的destroy方法,则调用它,如果实现了自定义的销毁方法,则调用之。

Spring AOP

Spring AOP,作为Spring框架的核心模块之一,是一种编程范式,它允许开发人员使用面向切面编程(AOP)的思想来解耦系统的不同层次。在软件开发中,功能散布于应用中多处,这些横切关注点(如日志、安全和事务管理)被称为横切关注点。

Spring AOP的核心概念是切面(aspect)、连接点(join point)、通知(advice)、切点(pointcut)和引入(introduction)。切面是一个模块化的概念,它定义了一组通用的功能,比如日志、安全和事务管理等,这些功能可以被应用到程序的各个部分。而连接点则是程序执行过程中的某个特定点,比如方法调用或者异常处理。通知则是针对连接点的某种行为,例如前置通知(before advice)、后置通知(after advice)和环绕通知(around advice)。切点则定义了哪些连接点需要应用哪种通知。最后,引入允许我们向现有的类添加新的方法或属性。

@Autowired注解

@Autowired加在某个属性上,Spring在进行Bean的生命周期过程中,在属性填充这一步会基于实例化出来的对象,对该对象中加了@ Autowired的属性自动给属性赋值。
Spring会先根据属性的类型去Spring容器中找出该类型所有的Bean对象,如果找出来多个,则再根据属性的名字从多个中再确定一个。如果required属性为true,并且根据属性信息找不到对象,则直接抛异常。

当@ Autowired注解写在某个方法上时,Spring在Bean生命周期的属性填充阶段,会根据方法的参数类型、参数名字从Spring容器找到对象当做方法入参自动反射调用该方法。

@ Autowired加在构造方法上时,Spring会 在推断构造方法阶段,选择该构造方法来进行实例化,在反射调用构造方法之前,会先根据构造方法参数类型、参数名从Spring容器中找到Bean对象,当做构造方法入参。

待续

你可能感兴趣的:(Spring Boot 相关知识)