05a9479f4951e5ce88e33371a7d0b70d.png

前后端分离 (服务端渲染、浏览器渲染)

实现真正的前后端解耦。

核心思想是前端 html 页面通过 ajax 调用后端的 restuful api 接口并使用 json 数据进行交互。

前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,安卓,IOS等等)打下坚实的基础。

介绍

Spring Boot 是所有基于 Spring 开发的项目的。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

和前端交互

前端的 Http 请求会到 controller 这一层,而 controller 层根据相应路由信息注解会跳转到相应的类。

// 如:/api/user 的get请求将会被 UserQry() 函数处理@RequestMapping("/api")public class UserController {        @RequestMapping(value ="/user", method = RequestMethod.GET)    public List UserQry() {        return userService.getUser();    }}

在框架经过处理以后,最终调用的是 mapper 层。

@Select("select * from user")  List<User> getUser();

在执行相应的 Sql 以后,将会依次返回到controller 层,然后在 Http 的返回中将会以Json 串对象返回给前端的调用方。

前端在 Http 的 response 中拿到返回的值,然后再进行一些处理。

概念

spring ioc 容器:,主要用来管理对象和依赖,以及依赖的注入

依赖注入: 不用 new,让 Spring 控制 new 过程

控制反转: 不是用 new 方式实例化对象, 实质的控制权已经交由程序管理

面向切面: 把一些功能抽离出来,再通过 “动态织入” 的方式掺入到业务中

Bean

bean 是一个对象,由 ioc 容器生成的对象就是一个 bean

配置 VS 注解

// Spring 的操作package com.yiibai.common;public class Customer {  private Person person;    public Customer(Person person) {    this.person = person;  }    public void setPerson(Person person) {    this.person = person;  }  //...}package com.yiibai.common;public class Person {  //...}// Spring 的配置Bean的xml"customer"   "person" // Spring 的注解方式public class Customer {  @Autowired  private Person person;}

注解

@SpringBootApplication

@SpringBootApplication = @Configuration + @EnableAutoConfiguration +@ComponentScan 简化程序的配置。

@Configuration

注解在类上,表示这是一个 IOC 容器,相当于 spring 的配置文件,IOC 容器的配置类。

@ComponentScan

如果扫描到有 @Component @Controller @Service 等这些注解的类,则把这些类注册为 bean。@Controller, @Service, @Repository 是 @Component 的细化,这三个注解比 @Component 带有更多的语义,它们分别对应了控制层、服务层、持久层的类。

@RestController

告诉 Spring 以 JSON 字符串的形式渲染结果,并直接返回给调用者。

@RequestMapping

告诉 Spring 这是一个用来处理请求地址映射的注解。

@Autowired

可以对类成员变量、方法及构造函数进行标注。从 IoC 容器中去查找,并自动装配。(去除 @Autowired 可以运行一下试试)

Mybatis 的 @Mapper

注解的接口生成一个实现类

跨域

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

跨域资源共享 (CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行的 Web 应用被准许访问来自不同源服务器上的指定的资源。

RESTful 风格

Rest 是 web 服务的一种架构风格,一种设计风格,URL 只指定资源,以 HTTP 方法动词进行不同的操作。

// 非RESTful接口api/getfile.php - 获取文件信息,下载文件api/uploadfile.php - 上传创建文件api/deletefile.php - 删除文件// 只需要api/users这一个接口GET http://localhost:8080/api/users (查询用户)POST http://localhost:8080/api/users (新增用户)PUT http://localhost:8080/api/users (更新用户)DELETE http://localhost:8080/api/users (删除用户)

Restful 好处:

URL 具有很强可读性的,具有自描述性

规范化请求过程和返回结果

资源描述与视图的松耦合

可提供OpenAPI,便于第三方系统集成,提高互操作性

提供无状态的服务接口,降低复杂度,可提高应用的水平扩展性

扩展

JAVA 的内存模型(非线程安全)、Linq、JWT、Redis、WebSocket、单点登录 (SSO)、消息队列

Spring Cloud 的分布式

其实在上面我们做的一个 Spring Boot 小的 demo 就是一个服务。若干个小的 Spring Boot 的模块,合在一起。使用一些分布式的套件,将模块集群化,让模块之间联系和管理起来,其实就是 Spring Cloud 的基本的微服务。

Spring Boot 和 SpringCloud 的关系

基于 Spring Boot 快速开发单个微服务,Spring Cloud 是一个基于 Spring Boot 实现的开发工具;Spring Boot 专注于快速、方便集成的单个微服务个体,Spring Cloud 关注全局的服务治理框架;Spring Boot 可以离开 Spring Cloud 独立使用开发项目,但是 Spring Cloud 离不开 Spring Boot,属于依赖的关系。

Dubbo

Dubbo 是一款高性能 Java RPC 框架, 地址:dubbo.apache.org/zh-cn/

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐