Spring Framework、SpringBoot、SpringCloud的关系;
Spring的诞生和历史:https://lushunjian.github.io/blog/2019/01/20/spring%E7%9A%84%E5%89%8D%E4%B8%96%E4%BB%8A%E7%94%9F/
Spring Framework
Spring Framework的核心是模块:
- Spring Core Container
- SpringBean的作用域和生命周期管理;
- IoC(Inversion of Control)
- BeanFactory
- ApplicationContext
- IoC(Inversion of Control)
- 通过动态代理实现横切关注点(如日志、事务)的模块化;
- 支持 AspectJ 注解 或 XML 配置定义切面;
- 数据库支持
- JDBC:简化传统JDBC操作;
- ORM框架集成:支持JPA、MyBatis、Hibernate;
- 事务管理:声明式、编程式事务;
- Web模块支持
- SpringMVC:基于Servlet的封装框架;
- WebFlux;
- 其他模块
- Testing;
- 国际化;
- 事件机制;
- SpEL表达式解析;
- Spring Security:OAuth2、JWT、RBAC等;
SpringMVC
是一套基于Servlet的封装的web服务器解决方案;
原生的Servlet需要手动解析
HttpServletRequest
请求来获取参数,手动渲染视图等;
public class UserServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // 解析请求参数 String userId = req.getParameter("id"); // 业务逻辑 User user = userService.getUser(userId); // 设置响应 req.setAttribute("user", user); req.getRequestDispatcher("/WEB-INF/views/user.jsp").forward(req, resp); } }
springweb-mvc
中提供了:
- DispatcherServlet作为核心控制器,将Servlet底层细节封装了起来,进行请求的生命周期管理;
- HandlerMapping:对请求进行路由到指定的处理方法;
- ViewResolver负责解析视图,如JSP、JSON、Html模版等;(在前后端分离的架构下,此组件不是很需要)
- Interceptor:负责在请求处理前后,执行额外的逻辑;类似于Servlet的filter;
SpringBoot
SpringBoot是对Spring Framework的进一步封装的脚手架工具,目的是简化Spring Framework的配置,快速开发;
为什么会出现SpringBoot?
- Spring的开发在大型项目中复杂度还是有的,大量的Xml配置;
- 复杂的依赖管理,引入的依赖也还需要手动配置;
- 部署复杂,Spring应用需要部署在web容器中(Tomcat);
SpringBoot如何解决这些问题:
- 采用注解、yaml等方式简化Xml配置;
- Starter 自动装配:
- 解决复杂依赖问题:一个Starter包含了一套依赖;比如spring-boot-starter-web包含了SpringMVC、Tomcat、jackson等;
- 自动装配:SpringBootApplication注解作为SpringBoot应用启动入口,此注解包含了:@EnableAutoConfiguration来启动自动配置、@ComponentScan启动注解扫描(@Controller、@Service等)、@Configuration扫描Bean;其中@EnableAutoConfiguration配合spring.factories来实现自动装配,并且提供了各种条件注解(@ConditionalOnClass、@ConditionalOnBean)来灵活选择自动装配的时机;
- 解决复杂依赖问题:一个Starter包含了一套依赖;比如
- 内嵌Web容器:集成Tomcat,无需部署War包;
- Actuator:提供健康检查、指标监控等运维功能;
SpringCloud
SpringCloud是基于Springboot的微服务生态组件集合,基于Springboot进行自动配置;
- 服务注册与发现:Eureka/Consul/Zookeeper
- 配置中心:SpringCloud Config
- 服务间通讯:OpenFeign、RestTemplate;
- 熔断限流:Hystrix
- 网关:SpringCloud Gateway