SpringBoot的前世今生
1. Spring
Spring 特性:IOC、AOP、DI,
Spring:解决对象耦合的问题,在 applicationContext.xml 中申明 bean,Spring在启动时会解析xml文件进行装载,当需要用对象时直接从容器中拿取bean。
Spring万能胶:方便集成各种插件中间件。
Spring本身的这个组件是轻量级,但是配置是重量级。因为所有组件的描述、依赖都需要添加对应的xml配置。
用SpringMVC去构建一个web项目的流程:
→ 创建一个项目结构(maven/ gradle)
→ pom.xml中 添加 spring依赖,spring mvc、servlet api 等等的依赖
→ 配置WEB-INF/web.xml, 配置 DispatcherServlet (spring mvc是在 jsp servlet 之上做的封装,所以需要配置dispatcherservlet 去拦截spring的请求)
→ 启动一个spring mvc的配置,Dispatcher-serclet.xml
→ 创建一个Controller 发布一个 http 请求
→发布到 jsp/servelt 容器
可以看出,除了 创建一个Controller 发布一个 http 请求,其它步骤都是通用模板
2. SpringBoot
SpringBoot 产生的原因:
① Spring配置的重量级。
② 对于项目构建过程中spring需要添加太多通用性模板性的配置。
③ 微服务萌芽阶段,正好也需要这样一个轻量级的服务化架构。
到底什么是 SpringBoot?——Applications that you can just run
(可以认为 SpringBoot 是 SpringFramework 的一个脚手架,可以使用SpringBoot 快速构建一个基于 SpringFramework 的应用 )
约定大于配置,使用 SpringBoot 只需关注 → 创建一个Controller 发布一个 http 请求 步骤,其它步骤 SpringBoot 已按照默认约定自动完成。
- 只要依赖 Spring-boot-starter-web 的 jar 包,就会自动内置一个 tomcat容器;(默认支持四种web容器:tomcat、jetty、undertow、reactor)
- 项目结构
- 默认提供了配置文件 application.properties. (项目中 ${key} 的引用会默认从application.properties中找key对应的value)
- starter启动依赖-如果是一个webstarter,默认认为你是去构建一个spring mvc的应用。
SpringBoot的特性
- EnableAutoConfiguration 自动装配
- Starter 启动依赖 依赖于自动装配的技术
- Actuator 监控 提供了一些endpoint,可以基于http、jmx形式去访问health、mrtrics信息...
- SpringBoot CLI (命令行操作的功能,可以在客户端基于groovy脚本快速构建springboot应用)
(这些特性并非springboot创造的,spring也支持特性,不过SpringBoot在Spring基础上进一步做了封装)
3. Spring 注解驱动的发展过程
SpringBoot的快速发展某种程度上依赖于Spring的注解驱动。
- spring 1.x :IOC的功能
- spring 2.x: 引入了一些注解@Required/ @Repository/ @Aspect
spring 2.5:@Controller、@Seivice、@Component、@RequestMapping
- spring 3.x:里程碑版本,
- @Configuration 取代 xml 文件,去 xml 化。核心目的:把bean对象更加便地加载到springIOC容器中
- @ComponentScan:扫描@Service、@Repository、@Controller
- @Import
- @Enable模块驱动:自动把模块相关组件的bean自动装配到IOC容器中。(如果没有这种方式,需要用@bean去装配,很难装配完全)(Enable可以自定义)