全球快看:深入理解Spring Boot架构
本文详细介绍基于Spring Boot框架的常见层次结构示例,帮助读者更好地了解和应用该框架。
本文的内容有助于理解Java Spring Boot框架的层次结构。
“我决定不让自己彻底崩溃,而是每个周二晚上都让自己小崩溃一下。” —— Graham Parke
【资料图】
检查任何软件的最好方法是将其分成层,然后将这些层合并在一起。我们在这里遵循同样的方法。
在深入研究Java Spring Boot之前,让我们先来看一个众所周知的例子——计算机网络中的OSI模型。虽然网络整体上看起来很复杂,但我们通常将其分成层次以组织协议。我们还声明每个层都依赖于下面一层提供的服务。在Spring Boot中,同样的原则也适用。
1 Spring Boot的层次结构
我们主要可以将Spring Boot分成四层:
1.1 控制器层
系统与客户端请求交互的第一部分是控制器。它们定义了API的端点,可以将端点想象为有效的路由和请求方法(GET、POST、PUT)。控制器的主要目标是向客户端提供服务,即提供响应、状态等。控制器利用服务层提供的服务来为客户端提供服务。
端点的示例:
/login (POST)/register (POST)/products (GET)1.2 服务层
服务层旨在实现业务逻辑。服务层的主要目的是向控制器层提供服务。所有对数据的计算都在这一层中执行,因此服务层需要数据。所以,它们依赖于DAO/Repository层提供的服务。
1.3 DAO/Repository层
DAO代表数据访问对象,这一层的主要目标是从数据库中高效地访问(查询)数据,并向服务层提供服务。
在Spring Boot中存在提供CRUD操作(创建、检索、更新、删除)的接口。因此,Repository层可以实现其中的一个。
1.4 模型层
模型表示现实世界中的对象,这些对象被称为模型。JPA(Java Persistence API)提供了关于ORM(对象关系映射)的参考或详细信息,这意味着Java类可以与数据库表相关联。在Spring Boot中存在许多JPA ORM的实现,其中之一是Hibernate。因此,您需要现实世界实体的Java类,然后将其映射到关系(表)中。
2 上述层次结构的实现模板
注意:对于实施,我们把项目管理作为一个主题。
2.1 控制器层:
ProjectController.java
package com.example.Controller;//导入语句在此处@RestControllerpublic class UserController { //列出所有可用项目 @GetMapping(path = "/projects", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getProjects() { // 执行验证检查 // 返回服务层提供的服务 } //申请项目 @PostMapping(path = "/apply-project", consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity applyProject(@RequestBody Map json) { // 执行验证检查 // 返回服务层提供的服务 } //上传简历 @PostMapping(path = "/upload-resume/{usn}") public ResponseEntity> uploadToDB(@RequestParam("file") MultipartFile[] file,@PathVariable String usn) { // 执行验证检查 // 返回服务层提供的服务 } //下载简历 @GetMapping("/files/download/{fileName:.+}") public ResponseEntity downloadFromDB(@PathVariable String fileName) { // 执行验证检查 // 返回服务层提供的服务 }}
上述示例使用了@注释,这些注释用于告知spring是否是RestController,PostMapping等。
2.2 服务层:
ProjectService.java
package com.example.Service;// 导入语句public interface ProjectService { ResponseEntity> getProjects(); HttpStatus applyProject(String USN,int project_id); ResponseEntity> uploadProjectDocument(MultipartFile[] files,int project_id);}
ProjectServiceImpl.Java
package com.example.Service;//导入语句@Servicepublic class ProjectServiceImpl implements ProjectService {//将DAO进行依赖注入(Autowire) @Override public ResponseEntity> getProjects() { try { //利用DAO服务实现业务逻辑 } catch (Exception e) { return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR) ; } } @Override public HttpStatus applyProject(String USN, int project_id) { //利用DAO服务实现业务逻辑 } //辅助函数 public ResponseEntity uploadToLocalFileSystem(MultipartFile file,int project_id) { } @Override public ResponseEntity> uploadProjectDocument(MultipartFile[] files,int project_id) { //利用DAO服务实现业务逻辑 }}
2.3 Repository/DAO层:
ProjectDAO.java
package com.example.Dao;//导入语句public interface ProjectDao extends JpaRepository {//你也可以在JPA提供的CRUD操作之上包含本地查询//使用@Query注释和相应的函数在此处添加查询 @Query(value = "Your SQL query ",nativeQuery = true) public List getProjects();}}
2.4 模型层:
Project.java
package com.example.Entity;//导入语句@Entity@Table(name = "project")public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int project_id; @Column(nullable = false, name = "company_name") private String company_name; @Column(nullable = false, name = "description") private String description; @Column(nullable = false, name = "requirements") private String requirements; @Column(nullable = false, name = "manager") private String manager; @Column(nullable = false, name = "start_date") private Date start_date = new Date(); @Column( name = "end_date") private Date end_date = new Date(); @Column(nullable = false,name = "opening") private int opening; @Column(name = "resources") private String resources; public Set getStaff_incharge() { return staff_incharge; } public void setStaff_incharge(Set staff_incharge) { this.staff_incharge = staff_incharge; } public Set getApplied_students() { return applied_students; } public Set getDocuments() { return documents; } public void setDocuments(Set documents) { this.documents = documents; } @JsonIgnore @ManyToMany(mappedBy="funded_projects") private Set funds; public Set getFunds() { return funds; } public void setFunds(Set funds) { this.funds = funds; } public void setApplied_students(Set applied_students) { this.applied_students = applied_students; } public Set getWorking_students() { return working_students; } public void setWorking_students(Set working_students) { this.working_students = working_students; }//构造函数 public Project() { super(); } public Project(int project_id, String company_name, String description, String requirements, String manager, Date start_date, Date end_date, int opening, String resources) { super(); this.project_id = project_id; this.company_name = company_name; this.description = description; this.requirements = requirements; this.manager = manager; this.start_date = start_date; this.end_date = end_date; this.opening = opening; this.resources = resources; } public int getProject_id() { return project_id; } public void setProject_id(int project_id) { this.project_id = project_id; } public String getCompany_name() { return company_name; } public void setCompany_name(String company_name) { this.company_name = company_name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getRequirements() { return requirements; } public void setRequirements(String requirements) { this.requirements = requirements; } public String getManager() { return manager; } public void setManager(String manager) { this.manager = manager; } public Date getStart_date() { return start_date; } public void setStart_date(Date start_date) { this.start_date = start_date; } public Date getEnd_date() { return end_date; } public void setEnd_date(Date end_date) { this.end_date = end_date; } public int getOpening() { return opening; } public void setOpening(int opening) { this.opening = opening; } public String getResources() { return resources; } public void setResources(String resources) { this.resources = resources; } @Override public String toString() { return "Project{" + "project_id=" + project_id + ", company_name="" + company_name + "\"" + ", descriptinotallow="" + description + "\"" + ", requirements="" + requirements + "\"" + ", manager="" + manager + "\"" + ", start_date=" + start_date + ", end_date=" + end_date + ", opening=" + opening + ", resources="" + resources + "\"" + "}"; }}
在上面的示例中,该类表示一个表,其数据成员表示表的属性。我们还可以使用OneToOne、ManyToOne、ManyToMany注释表示表之间的关系。
上述实现是不完整的,因为本文的目的是了解工作流程和层次结构。Spring Boot非常庞大,本文只涵盖了其中的一小部分。如果本文有任何错误,在此深表歉意,希望对您有所帮助,谢谢!
关键词:
-
全球快看:深入理解Spring Boot架构
2023-06-07 -
华彬旗下果倍爽使用过期原料?_世界新消息
2023-06-07 -
世界视讯!盘后数据显示 5机构合计卖出2.82亿元
2023-06-07 -
邮政快递已妥投是什么意思_已妥投是什么意思|今日报
2023-06-07 -
AI秒写2023重庆高考语文作文 你给它打多少分?
2023-06-07 -
柏乐园一日游作文600字-最新资讯
2023-06-07 -
先达股份(603086.SH):子公司“年产1,000吨咪唑烟酸、3,000吨农药中间体项目”进入试生产阶段|全球今热点
2023-06-07 -
今日最新!天通股份(600330)6月7日主力资金净卖出1009.32万元
2023-06-07 -
梨花声音教育退款
2023-06-07 -
wps不能打汉字只能打字母解决方法_环球快看点
2023-06-07 -
瑞文哪个皮肤手感最好_瑞文哪个皮肤手感好_世界热点
2023-06-07 -
大闹花灯连环画_闹花灯 评书故事连环画-每日视讯
2023-06-07 -
腾讯、阿里入选首批“双柜台证券”,港股市场迎盛夏升温? 全球新要闻|每日观察
2023-06-07 -
下血本?皇马给贝林厄姆的合同:税后年薪1000万欧+解约金10亿欧
2023-06-07 -
电动现代车型现在可以订阅驱动 期限从3个月到24个月不等 每日消息
2023-06-07 -
娃米逐渐淡出LPL解说席?宝藏男孩王多多频繁出镜,带妹buff拉满|世界独家
2023-06-07 -
环球要闻:中药板块震荡走高 九芝堂反包板
2023-06-07 -
二手房挂牌量攀升真相:房东抛售离场是假,“老破小”不受待见是真
2023-06-07 -
蓝帆医疗股东户数下降2.12%,户均持股7.46万元
2023-06-07 -
团结奋斗开新局 喜迎工会十八大·推进“产改”进行时 | 北京大兴工会多举措推进“产改” 以赛促育打造技能人才高地
2023-06-07 -
图片新闻
2023-06-07 -
张家口桥东区:人社窗口解民忧_世界最新
2023-06-07 -
青海省邮政管理局联合相关部门调研“客货邮”融合发展情况
2023-06-07 -
沪深股通|创业慧康6月6日获外资卖出0.01%股份
2023-06-07 -
学士大糕吃一口 金榜题名不用愁-热议
2023-06-07 -
世界视点!6月7日生意社煤焦油基准价为4372.50元/吨
2023-06-07 -
二手苹果6多少钱|新闻联播_二手苹果6多少钱
2023-06-07 -
世界速看:海南椰岛:涉未及时缴税、原材料采购纠纷等,子公司部分银行账户被冻结
2023-06-07 -
每日热闻!ATP挑战赛男单首轮:中国选手布云朝克特战胜温德肯,闯进第二轮
2023-06-07 -
专利代理机构管理系统官网_专利代理机构_全球观焦点
2023-06-07
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16