Spring Boot优点
- 简化maven依赖
- 自动配置
- 嵌入tomcat
spring boot依赖的版本仲裁中心
我们先创建一个项目
我们可以发现它有一个父模块spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
我们可以按住CTRL,然后点击去看看
我们发现这个父模块,自己还有父模块spring-boot-dependencies
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.2</version>
</parent>
我们继续点击进去看看
这里面定义了很多依赖的版本定义了spring boot项目中所有子模块依赖的版本号,称为spring boot的版本的仲裁中心。
spring boot启动器(简化maven依赖)
- 官方把很多模块功能,封装成了一个个的
启动器
- 命名方式:
spring-boot-starter-模块名
我们点击spring-boot-starter-web
,它里面的依赖如下代码所示
- 添加了spring-web、spring-webmvc等springmvc的依赖
- 添加了spring-boot-starter-tomcat依赖,嵌入了tomcat(精简版,不支持jsp,启动速度快)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.7.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.22</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
<scope>compile</scope>
</dependency>
</dependencies>
主启动类和主配置类(xxxApplication)
按住ctrl,点击这个注解进去看看
- @SpringBootApplication
标注了@SpringBootApplication注解的是程序主入口类和主配置类,它是一个组合注解,包含以下几个主要的注解
- @SpringBootConfiguration
它的内部使用了原生注解@Configuration说明当前类是项目的配置类
- @EnableAutoConfiguration 开启自动配置
- @ComponentScan 组件扫描,
默认会扫描主配置类所在包下的所有注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
String resourcePattern() default "**/*.class";
boolean useDefaultFilters() default true;
ComponentScan.Filter[] includeFilters() default {};
ComponentScan.Filter[] excludeFilters() default {};
boolean lazyInit() default false;
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Filter {
FilterType type() default FilterType.ANNOTATION;
@AliasFor("classes")
Class<?>[] value() default {};
@AliasFor("value")
Class<?>[] classes() default {};
String[] pattern() default {};
}
}
测试类
我们可以看到用单元测试,也是可以的,那么什么情况单元测试不好用呢
我们创建一个实体类stu
然后测试一下,我们发现stu并没有注入进来
因为这个时候,我们在单元测试中,并没有把springboot的一些配置整合进来,我们加上@SpringBootTest
使用maven构建spring boot项目
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zyh.springboot</groupId>
<artifactId>springboot04_maven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 父模块-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<!--模块启动器-->
<dependencies>
<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>
</dependency>
</dependencies>
</project>
添加主程序
先创建一个包,然后把主程序写在这个包下面
在配置文件中可以指定端口号等信息
编写Controller
测试,运行启动类