✨Spring Boot底层原理Spring Boot优点
- Spring Boot优点
- spring boot依赖的版本仲裁中心
- spring boot启动器(简化maven依赖)
- 主启动类和主配置类(xxxApplication)
- 测试类
- 使用maven构建spring boot项目
个人主页: 不断前进的皮卡丘
博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器
- 简化maven依赖
- 自动配置
- 嵌入tomcat
我们先创建一个项目
我们可以发现它有一个父模块spring-boot-starter-parent
org.springframework.boot spring-boot-starter-parent 2.7.2
我们可以按住CTRL,然后点击去看看
我们发现这个父模块,自己还有父模块spring-boot-dependencies
org.springframework.boot spring-boot-dependencies 2.7.2
我们继续点击进去看看
这里面定义了很多依赖的版本
定义了spring boot项目中所有子模块依赖的版本号,称为spring boot的版本的仲裁中心。
- 官方把很多模块功能,封装成了一个个的启动器
- 命名方式:spring-boot-starter-模块名
我们点击spring-boot-starter-web,它里面的依赖如下代码所示
- 添加了spring-web、spring-webmvc等springmvc的依赖
- 添加了spring-boot-starter-tomcat依赖,嵌入了tomcat(精简版,不支持jsp,启动速度快)
主启动类和主配置类(xxxApplication)org.springframework.boot spring-boot-starter 2.7.2 compile org.springframework.boot spring-boot-starter-json 2.7.2 compile org.springframework.boot spring-boot-starter-tomcat 2.7.2 compile org.springframework spring-web 5.3.22 compile org.springframework spring-webmvc 5.3.22 compile
按住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
pom.xml
4.0.0 com.zyh.springboot springboot04_maven 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.7.2 8 8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test
添加主程序
先创建一个包,然后把主程序写在这个包下面
在配置文件中可以指定端口号等信息
编写Controller
测试,运行启动类



