Spring 生态

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的核心是模块:

  1. Spring Core Container
    1. SpringBean的作用域和生命周期管理;
    2. IoC(Inversion of Control)
    3. BeanFactory
    4. ApplicationContext
  2. IoC(Inversion of Control)
    1. 通过动态代理实现横切关注点(如日志、事务)的模块化;
    2. 支持 AspectJ 注解 或 XML 配置定义切面;
  3. 数据库支持
    1. JDBC:简化传统JDBC操作;
    2. ORM框架集成:支持JPA、MyBatis、Hibernate;
    3. 事务管理:声明式、编程式事务;
  4. Web模块支持
    1. SpringMVC:基于Servlet的封装框架;
    2. WebFlux;
  5. 其他模块
    1. Testing;
    2. 国际化;
    3. 事件机制;
    4. SpEL表达式解析;
    5. 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?

  1. Spring的开发在大型项目中复杂度还是有的,大量的Xml配置;
  2. 复杂的依赖管理,引入的依赖也还需要手动配置;
  3. 部署复杂,Spring应用需要部署在web容器中(Tomcat);

SpringBoot如何解决这些问题:

  1. 采用注解、
    yaml
    等方式简化Xml配置;
  2. Starter 自动装配
    1. 解决复杂依赖问题:一个Starter包含了一套依赖;比如
      spring-boot-starter-web
      包含了
      SpringMVC
      Tomcat
      jackson
      等;
    2. 自动装配
      SpringBootApplication
      注解作为SpringBoot应用启动入口,此注解包含了:
      @EnableAutoConfiguration
      来启动自动配置、
      @ComponentScan
      启动注解扫描(@Controller、@Service等)、
      @Configuration
      扫描Bean;其中
      @EnableAutoConfiguration
      配合spring.factories来实现自动装配,并且提供了各种条件注解(
      @ConditionalOnClass
      @ConditionalOnBean
      )来灵活选择自动装配的时机;
  3. 内嵌Web容器:集成Tomcat,无需部署War包;
  4. Actuator:提供健康检查、指标监控等运维功能;

SpringCloud

SpringCloud是基于Springboot的微服务生态组件集合,基于Springboot进行自动配置;

  1. 服务注册与发现:Eureka/Consul/Zookeeper
  2. 配置中心:SpringCloud Config
  3. 服务间通讯:OpenFeign、RestTemplate;
  4. 熔断限流:Hystrix
  5. 网关:SpringCloud Gateway