Spring Boot入门

Updated on with 0 views and 0 comments

示例

依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>top.wu</groupId>
	<artifactId>springbootdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springbootdemo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>

		<!-- Spring Boot场景启动器,帮我们导入了web模块正常运行所依赖的组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<!-- 可以将应用打包成一个可执行的jar包 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

Spring Boot将所有的功能场景都抽取出来,做成一个个starters(启动器),只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来。需要什么功能就导入什么场景启动器

<!-- spring-boot-starter-parent的父项目 -->
<!-- Spring Boot的仲裁中心,导入依赖默认不需要写版本,没有在dependencies中管理的就需要写 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.6.RELEASE</version>
  </parent>
程序入口
@SpringBootApplication   //来标注一个主程序类,说明这是一个Spring Boot应用
public class SpringbootdemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootdemoApplication.class, args);
	}

}
  • @SpringBootApplication:注解标注在某个类上,说明该类是 SpringBoot 的主配置类,SpringBoot 就应该运行这个类的 main 方法来启动项目

  • @SpringBootConfiguration:标注某个类是配置类

    • @Configuration:配置类上标注这个注解 --- 与配置文件功能相同,配置类也是一个组件
  • @EnableAutoConfiguration:开启自动配置功能 --- 以前需要配置的东西,现在都不需要配置

    • @AutoConfigurationPackage:自动配置包,将主配置类(@SpringBootApplication 标注的类)的所在包及下面所有子包里面的所有组件扫描到 Spring 容器中

      • @Import({Registrar.class}):Spring 的底层注解,给容器中导入一个组件;导入的组件有 Registrar.class
        public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {    //meatdata表示元数据,包含扫描到的组件的信息
            AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
        }
        
    • @Import({AutoConfigurationImportSelector.class}):导入哪些组件的选择器 --- 将所有需要导入的组件以全类目的方式返回;这些组件就会被添加到容器中,会给容器中导入非常多的自动配置类(XXXAutoConfiguration);就是给这些容器中导入这个场景所需要的所有组件,并配置好这些组件,免去了手动编写配置注入功能组件的工作

      //部分源码
      protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
      List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
      Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
          return configurations;
      }
      
      protected Class<?> getSpringFactoriesLoaderFactoryClass() {
          return EnableAutoConfiguration.class;
      }
      

    Spring Boot启动时从类路径下的 META-INF/spring.factories 中获得 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行配置工作

    J2EE 的整体整合解决方案和自动配置都在:spring-boot-autoconfigure-2.2.1.RELEASE.jar 中

使用 Spring Initializer 创建一个 SpringBoot 项目

image.png

image.png

  • 主程序
  • resources 配置文件夹
    • static:保存所有的静态资源;js、CSS 这些
    • templates:保存所有的模板页面;(Spring Boot 默认 jar 包使用嵌入式的 Tomcat,不支持 JSP 页面);可以使用模板引擎(FreeMarker、thymeleaf)
    • application.properties:Spring Boot 的配置文件