hello world探究
1.pom文件
1.1导入父项目
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent>
1.2导入父项目有什么用?
按住ctrl+点击<artifactId>spring-boot-starter-parent</artifactId>可发现
它还依赖于另一个父项目,
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
按住ctrl+点击 <artifactId>spring-boot-dependencies</artifactId>
它定义了我们每一个依赖的工具的版本号,
Spring Boot的版本仲裁中心;
所以以后的导入依赖是不用再定义版本号的,有的版本已经在父的父文件中定义清楚
再者为避免自己导入的版本与spring boot的其他工具出现不兼容情况。不要自己添加版本号,以免画蛇添足
但是有些是没有预定义的工具,需要开发者自己声明版本号
1.3导入的依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
spring-boot-starter-web
我们可以发现一个规律,spring-boot-starter在多个位置出现
spring-boot-starter:spring boot场景启动器
按住ctrl+点击<artifactId>spring-boot-starter-web</artifactId>
看文件描述;他说,作为web项目,他包含了RESTful,SpringMVC,使用tomcat作为默认的web服务容器。
再看依赖,果真为我们继续导入了,tomcat相关依赖配置,以及springMVC的一些核心。
spring将所有的场景做了抽取,做成了一个个的starts(启动器),我们在主POM文件中只需要确定好场景,相关依赖自动导入。
1.4启动器
https://docs.spring.io/spring-boot/docs/1.5.19.RELEASE/reference/htmlsingle/#using-boot-starter
查看这里看看有多少应用场景,根据不同的场景确定使用的场景启动器
2.主程序类,主入口类
@SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { //springbooot跑起来 SpringApplication.run(HelloWorldMainApplication.class,args); } }
@SpringBootApplication注解
这个标记标在那个类上,说明哪个类是springboot的主配置类
springboot就应该运行这个类的main方法来启动SpringBoot应用
按ctrl+@SpringBootApplication
可以看到这是一个组合注解
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} )
有上面多个注解组成
@SpringBootConfiguration:字面意思,SpringBoot配置类,
再递进一层可以发现有个@Configuration注解
2.1啥叫配置类?
这个文章讲的比较详细,我这里大体说一下,读者可看一下这篇文章
https://www.cnblogs.com/duanxz/p/7493276.html
配置类可以代替之前的配置文件的作用
@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>
,作用为:配置spring容器(应用上下文)
如果你足够执着,你会发现@Configuration下竟然还有@Component这个注解
说白了。其实一个配置类就是一个“组件”
@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>)
2.2@EnableAutoConfiguration
开启自动配置功能
以前我们需要配置的东西,现在不需要动手配置了,springboot自动帮我们进行配置
SpringBoot开启自动配置功能,这样自动配置才能生效
@AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {
@AutoConfigurationPackage自动配置包
@Import({Registrar.class})
@import注解是spring的底层注解,给容器中导入一个组件;导入的组件由{Registrar.class}指定
将主配置类(@SpringBootApplication标记的类)的所在包及下面的所有的子包里面的所有组件都扫描到spring容器。