当别人问你Spring和Spring Boot的区别时,你可能会随口而出
- 应用可以直接运行,而不用打成jar包再放到tomcat中运行
- 当使用某些功能时,引入相应的starter即可,不用再配置各种Bean了
其实我觉得自动装配才是Spring Boot最大的创新。应用直接运行我们用嵌入式tomcat就可以办到。我们把之前的spring mvc项目改为直接运行
依赖如下
org.springframework spring-context 5.2.19.RELEASE org.springframework spring-webmvc 5.2.19.RELEASE org.apache.tomcat.embed tomcat-embed-core 8.0.28 org.apache.tomcat.embed tomcat-embed-logging-juli 8.0.28 org.apache.tomcat.embed tomcat-embed-jasper 8.0.28
这3个类就是我们之前分析Spring MVC源码用到的,工作原理我就不再重复了。现在我们要把它改造为直接通过main方法运行
点击main方法即可运行。
一个典型的Spring Boot的启动类如下
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
写成如下形式你可能更好理解
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class BlogConfiguration {
}
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogConfiguration.class, args);
}
}
Spring Boot的源码和我们代码的区别就是
Spring容器是在main中启动spring容器和tomcat的,在WebApplicationInitializer实现类中,将DispatcherServlet注册到tomcat中
而我们的代码只在main方法中启动了tomcat容器,在WebApplicationInitializer实现类中启动spring容器和将DispatcherServlet注册到tomcat中。你可以将上面的代码改一下,改成和Spring容器一样的形式
所以我们把spring boot的启动流程和自动装配是如何实现的搞懂,基本上就把spring boot搞懂了。
参考博客


