关于Spring 与 Spring Boot 的一些图

Spring Framework 启动流程

1. 流程图

以下流程图展示了 Spring Framework 从创建 ApplicationContext 到完成初始化的关键步骤。

flowchart TD
    A[启动入口: main 方法] --> B[创建 AnnotationConfigApplicationContext]
阅读更多

Spring Framework 与 Spring Boot 启动对比

Spring Boot 和 Spring Framework 都是构建现代 Java 企业级应用程序的强大工具。Spring Boot 基于 Spring Framework 之上,旨在简化 Spring 应用的创建和配置过程。尽管两者在启动流程上存在许多相似之处,但 Spring Boot 引入了一些额外的机制和约定,以提高开发效率和应用的可扩展性。以下将详细对比两者的启动流程,强调它们的异同点,并结合源码角度进行说明。

目录

  1. 总体架构对比
阅读更多

Spring Boot 启动流程分析

Spring Boot 简化了基于 Spring 的应用程序的创建和部署过程,其启动流程涉及多个步骤和组件。为了详细理解 Spring Boot 的启动流程,我们可以从源码的角度进行分析。以下是 Spring Boot 启动过程的详细介绍,结合关键源码类和方法进行说明。

应用程序的入口点

通常,Spring Boot 应用程序的启动入口是一个带有 main 方法的类,该类使用 @SpringBootApplication 注解。例如:

1
2
3
4
5
6
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
阅读更多

使用 Spring Boot + Javassist 实现运行时动态添加和删除 Controller

引言

在某些特殊场景下,我们可能需要在 Spring Boot 应用运行时动态地添加或删除 Controller。本文将详细介绍如何使用 Javassist 和 Spring Boot 的内部机制来实现这个功能。

技术栈

  • Spring Boot 2.7.0
  • Javassist 3.29.0-GA
  • Java 8+

Maven 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.29.0-GA</version>
</dependency>
</dependencies>
阅读更多

Spring Boot WebService服务搭建

XJC

xjc 是 Java Architecture for XML Binding (JAXB) 的一部分,它是一个命令行工具,用于将 XML 架构(XML Schema)转换为 Java 类。以下是 xjc 工具的基本用法:

基本命令格式

1
xjc [options] <schema file/URL/dir>
阅读更多

Spring Boot 启动流程

前言

SpringApplication 启动过程主要包括两个阶段:

  • 初始化阶段
  • 启动阶段

一、初始化阶段

1
2
3
4
5
6
7
8
9
10
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
this.webApplicationType = deduceWebApplicationType();
setInitializers((Collection) getSpringFactoriesInstances(
ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
阅读更多

Java 项目启动时执行指定逻辑

1. Java自身的启动时加载方式

  • static代码块: static静态代码块,在类加载的时候即自动执行
  • 构造方法: 在对象初始化时执行。执行顺序在static静态代码块之后。

2.Spring启动时加载方式

阅读更多