Java后端开发体系总结

73 阅读7分钟

前言,后端开发,最基础的就是接口的开发,例如前端传来一个id=1,我们只要把这个id传给后端接口(域名,端口号,),然后后端连接数据库,执行 select。。where id=1 查询成功后再把数据返回给前端。前端进行渲染,展示给用户,就完成了。

前后端分离的单体模式

SSM出现的意义

Spring框架的问题解决方案

Spring框架是一个综合性的企业应用开发框架,它提供了一系列的解决方案,简化了Java后端开发过程中的许多常见问题。以下是Spring框架解决的一些主要问题:

  1. 依赖注入(DI):

    • 问题:  传统的Java开发中,对象之间的依赖关系需要在代码中硬编码,导致代码紧耦合,难以维护和测试。
    • Spring解决方案:  提供了依赖注入机制,通过配置文件或注解,将对象之间的依赖关系交由Spring容器管理,降低了组件之间的耦合度。
  2. 面向切面编程(AOP):

    • 问题:  在传统编程中,业务逻辑和横切关注点(如日志、事务、安全性)通常交织在一起,难以维护和理解。
    • Spring解决方案:  提供AOP支持,允许将横切关注点从业务逻辑中分离出来,通过切面进行统一管理,提高了代码的模块化性和可维护性。
  3. 声明式事务管理:

    • 问题:  手动管理事务代码容易出错,而且增加了代码的复杂性。
    • Spring解决方案:  提供声明式事务管理,通过注解或配置文件的方式,简化了事务管理,使得开发者可以专注于业务逻辑而不是事务处理。
  4. 框架集成:

    • 问题:  在开发过程中,需要使用多个不同的框架,导致整合和配置的复杂性。
    • Spring解决方案:  提供了集成层,支持与各种其他框架(如Hibernate、MyBatis、Struts等)的无缝集成,简化了开发过程。
  5. 简化数据访问:

    • 问题:  传统的JDBC代码繁琐,容易出错,难以维护。
    • Spring解决方案:  提供了JdbcTemplate等简化数据访问的工具,同时支持ORM框架,简化了数据库访问的代码。
  6. 模块化开发:

    • 问题:  大型应用的开发中,模块化划分和管理复杂。
    • Spring解决方案:  提供了IoC容器、模块化的组件化开发,使得应用可以分解为¥¥的、易于管理的组件。
  7. 简化RESTful服务开发:

    • 问题:  传统的方式中,开发RESTful服务需要处理HTTP协议、参数解析等一系列细节。
    • Spring解决方案:  Spring框架通过Spring MVC提供了简化RESTful服务开发的支持,开发者可以通过注解方式轻松创建RESTful接口。
    • Spring MVC的问题解决:

Spring MVC(Model-View-Controller)是Spring框架的一个模块,旨在解决Web应用程序开发中的一些常见问题。以下是Spring MVC解决的主要问题:

  1. 分离关注点:

    • 问题:  在传统的Servlet开发中,业务逻辑、数据处理和视图展示通常混合在一起,难以维护和理解。
    • 解决方案:  Spring MVC通过MVC模式将应用程序分为模型(Model)、视图(View)和控制器(Controller),使得关注点分离,提高了代码的可维护性和可测试性。
  2. 灵活的请求处理:

    • 问题:  Servlet编程通常需要在单一的Servlet类中处理所有请求,导致代码冗长且难以管理。
    • 解决方案:  Spring MVC允许开发者使用不同的Controller类和方法来处理不同类型的请求,使得请求处理更加模块化和灵活。
  3. 视图解析和渲染:

    • 问题:  在传统的Servlet开发中,视图的选择和渲染通常与业务逻辑混合在一起,难以修改或替换。
    • 解决方案:  Spring MVC提供了视图解析器,使得开发者能够根据逻辑视图名选择具体的视图实现,并支持各种视图技术,如JSP、FreeMarker等。
  4. 数据绑定和验证:

    • 问题:  处理表单提交时,数据的绑定和验证可能会变得复杂,容易出错。
    • 解决方案:  Spring MVC提供了数据绑定和验证的机制,简化了表单数据的处理,并提供了易于使用的验证框架。
  5. 拦截器和过滤器:

    • 问题:  在Web应用中,经常需要进行请求预处理或后处理,传统的Servlet开发中需要通过过滤器实现。
    • 解决方案:  Spring MVC引入了拦截器(Interceptor),使得开发者可以更方便地实现请求的前置和后置处理,而无需依赖于Servlet过滤器。

Spring Boot 解决了什么问题?

Spring Boot 是一个基于 Spring 框架的微服务开发框架,它致力于简化和加速 Spring 应用程序的开发和部署。Spring Boot 解决了以下一些常见的问题:

  1. 简化配置: Spring Boot 提供了一套默认的配置,减少了开发者需要手动配置的工作。这使得开发者能够更快速地启动项目,并专注于业务逻辑的实现。
  2. 集成常用库: Spring Boot 集成了许多常用的第三方库和框架,例如 Spring Data JPA、Spring Security、Thymeleaf 等,从而减少了集成这些库时的繁琐工作。
  3. 自动化: Spring Boot 提供了自动配置和自动化的特性,通过在 classpath 中查找特定的库,自动配置可以自动应用。这降低了开发者的工作负担,减少了样板代码。
  4. 内嵌服务器: Spring Boot 支持将应用程序打包成可执行的 JAR 或 WAR 文件,并内嵌了常用的服务器(如Tomcat、Jetty),这样可以方便地将应用程序部署到任何支持 Java 的环境中。
  5. 微服务支持: Spring Boot 提供了对微服务架构的良好支持,通过 Spring Cloud 提供的组件,可以轻松实现服务注册与发现、负载均衡、断路器等微服务模式。

为什么引入redis

因为如果查询量很大,都打到mysql数据库上,mysql数据库可能会挂掉,mysql数据库是基于外存的,查询速度慢,这时候引入redis做缓存,先查缓存,缓存中没有数据再查mysql数据库,可以减轻mysql数据库访问压力,而且可以提起把热点数据预热。如果服务器的性能瓶颈是在数据库。这好办,给服务器加上 Redis,让其作为数据库的缓存。提高服务器的性能。

但是也引出了mysql和redis数据一致性的问题。

先删缓存后更新数据库

解决方案一先更新数据库,后删除缓存

  • 采用先更新数据库,后删除缓存的方式来解决并发引发的一致性问题;
  • 采用异步重试的方式来保证“更新数据库、删除缓存”这两步都能执行成功;
  • 可以采用订阅变更日志的方式来清除 Redis 中的缓存;

  • APP 从 Redis 中查询信息,将数据的更新写入 MySQL 数据库中;
  • Canal 向 MySQL 发送 dump 协议,接收 binlog 推送的数据;
  • Canal 将接收到的数据投递给 MQ 消息队列;
  • MQ 消息队列消费消息,同时删除 Redis 中对应数据的缓存;

方案二 同时更新数据库和缓存

不管是前置和后置更新都会有数据不一致的问题,并发情况