前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊一下简易版的“Spring Boot”写的咋样了

聊一下简易版的“Spring Boot”写的咋样了

作者头像
Guide哥
发布2020-10-10 14:55:19
4730
发布2020-10-10 14:55:19
举报
文章被收录于专栏:JavaGuide

周末我发了一篇 《摊牌了!我要手写一个“Spring Boot“》 详细介绍了我最近正在做的事情,没有看过的小伙伴可以先看下这篇文章。

昨天早上,6 点多一点就起来写代码了,前天晚上和朋友一起吃晚饭回来之后也搞到很晚,有时候想尽快把某些东西写完的时候确实是会这样。

但是,说实话效率会降低很多,不推荐这样做。像我之前写guide-rpc-framework[1] 的时候,经常周末不出门,一坐就是一天。到了晚上整个人一脸油,眼睛还很酸,效率低了太多。

目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping@PostMapping@PathVariable 写完了。

整个项目的目录结构如下,还算比较清晰。我也已经将项目开源出来了,地址:https://github.com/Snailclimb/jsoncat 。原创开源不易,觉得不错的话,欢迎给良心作者 1 个 star 鼓励一下!

介绍

jsoncat 是我(Guide 哥,Gai 的哥)模仿 Spring Boot 写的一个轻量级的 HTTP 框架。

jsoncat 内置由 Netty 编写 HTTP 服务器,无需额外依赖 Tomcat 之类的 web 服务器。使用 Netty 几十行代码即可实现一个简易的 HTTP 服务,性能高且轻量。

为什么要写?

写这个东西只是自己个人的兴趣爱好使然,也不是说非要拿到项目上实际去使用,主要目的还是为了提高自己的编码能力。推荐小伙伴们也要尽量能够将自己的想法付诸于行动。

理论知识固然重要,但是脱离于实践的理论并不可靠。相比于 CRUD ,自己造个轮子,肯定是更有意思,也更能锻炼自己的编程能力和解决问题的能力。

特点

1.内置由 Netty 编写 HTTP 服务器,无需额外依赖 Tomcat 之类的 web 服务2.代码简洁,可读性好3.支持 Spring MVC 常用的注解,用法也和 Spring MVC 一样4.后端只返回 json 数据给前端5.集成了 checkstyle 、spotbugs、pmd 并设置了 commit 钩子来保证代码质量

框架基本情况和代办

功能实现上,没有太去模仿参考 Spring 的源码,那样的话没太大必要,完全就是按照自己的想法写的,会借鉴一些 Spring 源码的思想。

功能其实写的挺快的,大部分时间都在重构。讲真, 我已经很尽力地保证代码的可读性了。尽量使用最少的代码实现功能, 并且不影响可读性。

目前,我还不是特别满意,欢迎小伙伴们一起来完善啊!人多力量大!

功能演示

User.java :用户实体类

代码语言:javascript
复制
@Data
@AllArgsConstructor
public class User {
    private String name;
    private String des;
    private Integer age;
}

UserDto.java : 创建用户的传输对象

代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
    private String name;
    private String des;
    private Integer age;
}

UserController.java:用户层 controller

代码语言:javascript
复制
@RestController("/user")
public class UserController {
    private static HashMap<Integer, User> users;
    private static Integer id;

    static {
        users = new HashMap<>();
        users.put(1, new User("盖伦", "德玛西亚", 22));
        id = 2;
    }

    @GetMapping
    public User get(@RequestParam("name") String name, @RequestParam("des") String des, @RequestParam("age") Integer age) {
        return new User(name, des, age);
    }

    @GetMapping("/{id}")
    public User get(@PathVariable("id") Integer id) {
        return users.get(id);
    }

    @PostMapping
    public List<User> create(@RequestBody UserDto userDto) {
        users.put(id++, new User(userDto.getName(), userDto.getDes(), userDto.getAge()));
        return new ArrayList<>(users.values());
    }
}

Get 请求:@PathVariable传参

Get 请求:@RequestParam传参

Post 请求

请求错误的处理情况

当传入的参数类型不正确时:

当指定的参数未传递时:

References

[1] guide-rpc-framework: https://github.com/Snailclimb/guide-rpc-framework

闲聊

前天和大学童鞋一起出玩,碰巧有一个武汉某211自动化专业的一位研究生随同。自动化专业的这位老哥说:”我们实验室里的基本所有人都转 CS,毕竟这玩意工资确实比较高。996什么的, 我们根本不在乎,只要钱多就够了”。

我当时上大学的时候,也觉得钱够了 996 没啥,真正到了这个时候,还是有点难以接受的。哈哈哈!

虽然,计算机行业的人越来越多,但我个人觉得是没办法避免的。未来我相信计算机教育会越来越被普及,我也非常看好少儿编程教育。让我们拭目以待吧!

我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaGuide 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 特点
  • 框架基本情况和代办
  • 功能演示
    • Get 请求:@PathVariable传参
      • Get 请求:@RequestParam传参
        • Post 请求
          • 请求错误的处理情况
            • References
            • 闲聊
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档