现在Java的项目开发中,几乎都会引入Spring框架,甚至有人说java开发现在就是在面向Spring编程。基于Spring提供了很多的功能,可以使我们可以方便地构建出低耦合、易扩展、易维护的应用,比如:IOC、AOP、Spring Web、事务等,。但是如果我们使用原生的Spring framework来开发,我们就需要自己引入许多Spring的依赖包,如果少引入某个依赖包,就会导致我们的应用构建失败,而且如果我们需要引入一些第三方组件,比如:mybatis、redis等,我们也需要相应的去寻找合适的依赖包,这个过程是很繁琐而且需要消耗比较多的成本。
如果我们是使用SpringBoot来开发,我们只需要引入相应的*-starter包,这个*-starter依赖包便可以帮我们把相应需要的依赖包自动导入到项目中,这边便是SpringBoot提供的快速启动功能;SpringBoot还提供了自动配置功能,帮助我们自动集成配置了很多第三应用的默认配置,使得我们只需要修改很少的配置甚至不需要修改任何配置就可以将第三方组件引入进来,而且SpringBoot还内置了Web服务器,比如:Tomcat、Jetty等,让我们不再需要自己将应用部署到Web服务器中,直接就可以启动起来。简单来说,使用SpringBoot可以让我们更加快速地构建和启动一个应用程序,简化我们的开发工作,使我们能够更加专注于业务功能的开发。
既然使用SpringBoot有这么多的好处,那么SpringBoot启动过程中都做了哪些工作呢?本篇文章就让我们一起来看一下SpringBoot的启动流程。
SpringBootApplication注解
我们可以通过如下的方式启动一个SpringBoot应用,如下所示:
@SpringBootApplication //SpringBoot应用的注解
public class Application {
public static void main(String[] args) {
//执行SpringApplication的run方法
SpringApplication.run(Application.class, args);
}
}
我们看到的是在Application上面有一个@SpringBootApplication注解,这个注解有什么用呢?下面我们就一起来看一下SpringBootApplication注解的定义。
..省略其他注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
...省略无关代码
}
在上面的SpringBootApplication注解的定义中,我们会发现SpringBootApplication注解其实是一个复合注解,也就是组合了其它注解的注解,如果我们不想使用SpringBootApplication注解,其实也可以单独使用上面的三个注解来标识我们的Application启动类,效果也是一样的,如下所示:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class Application {
...省略无关代码
}
下面我们就来看一下SpringBootApplication中这三个核心注解分别起什么作用。
SpringBootConfiguration注解
该注解定义如下: