jsoncat:https://github.com/Snailclimb/jsoncat (About

仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架)

边看英雄联盟比赛,边和小伙伴们简单聊聊简易版的“Spring Boot”的近况吧!JDG 冲冲冲!!!

全文内容不会很多,因为不会详细介绍实现过程,大家节假日肯定也不想看。后面会详细写文章分享自己的实现过程比如 Spring MVC、IoC 模块到底是咋实现的(最简化原则实现,能用最少的代码就用最少的代码。便于维护,便于学习)。

9.29号的晚上,我已经在老家了。

晚上和女票还有妹妹一起开黑打完游戏之后,已经到了快11点。有点睡不着,内心躁动,就把 HTTP 框架的 IoC 的基本功能给实现了。

第二天,我又抽出了一些时间,对其进行了优化和重构。

目前不光支持 @Autowired(注入对象) 和 @Component (声明对象被 IoC 容器管理),还支持 @Qualifier(指定注入的bean)。

简单给大家看一下效果!

声明一个接口:SmsService.java

public interface SmsService {
String send(SmsDto smsDto);
}

实现类1:AliSmsServiceImpl.java

@Component(name = "aliSmsServiceImpl")
public class AliSmsServiceImpl implements SmsService { @Override
public String send(SmsDto smsDto) {
System.out.println("send message to " + smsDto.getPhone());
return AliSmsServiceImpl.class.getSimpleName();
}
}

实现类2:QiNiuSmsServiceImpl.java

@Component(name = "qiNiuSmsServiceImpl")
public class QiNiuSmsServiceImpl implements SmsService { @Override
public String send(SmsDto smsDto) {
System.out.println("send message to " + smsDto.getPhone());
return QiNiuSmsServiceImpl.class.getSimpleName();
}
}

post请求传输类:SmsDto.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmsDto {
private String phone;
}

controller: SmsController.java

@RestController("/sms")
public class SmsController {
@Autowired
@Qualifier("aliSmsServiceImpl")
private SmsService smsService; @PostMapping("/send")
public String send(@RequestBody SmsDto smsDto) {
return smsService.send(smsDto);
} }

使用 post 请求调用 /sms/send 接口

截止目前,我已经把 Spring MVC 相关常用的注解比如 @GetMapping 、@PostMapping@PathVariable 以及 IoC 相关的注解比如 @Autowired@Component@Qualifier实现了。

后续,会开始实现 AOP 相关的功能。

另外,为了方便小伙伴们学习。我今天下午又把包结构进行了重构,并且完善了一下注释。

包结构方面的重构,主要就是将 Spring MVC 和 IoC 的核心实现类提到了一个包下面。这样,小伙伴们想要看某一个功能模块的具体实现的话,就比较方便了。

这几天,除了10.1号和10.2号没有写代码之外,我花了大量时间重构代码。

我花在重构代码的时间经常比实现功能的时间花的更多。这其实是挺正常的!重构代码的是编码过程中必不可少的环节,千万不要觉得自己的代码写了之后就不需要重构了!

另外,为了给重构代码提高保障,我不得不写了一些测试。通过测试保障,确实为我节省了很多时间,也让我更敢进行重构。

我是 Guide 哥,一 Java 后端开发,会一点前端,自由的少年。我们下期再见!微信搜“JavaGuide”回复“面试突击”领取我整理的 4 本原创PDF

手写“SpringBoot”近况:IoC模块已经完成的更多相关文章

  1. 手写SpringBoot自动配置及自定义注解搭配Aop,实现升级版@Value()功能

    背景 项目中为了统一管理项目的配置,比如接口地址,操作类别等信息,需要一个统一的配置管理中心,类似nacos. 我根据项目的需求写了一套分布式配置中心,测试无误后,改为单体应用并耦合到项目中.项目中使 ...

  2. 手写一个HTTP框架:两个类实现基本的IoC功能

    jsoncat: 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 国庆节的时候,我就已经把 jsoncat 的 IoC 功能给写了,具体可以看这篇文章&l ...

  3. 框架源码系列二:手写Spring-IOC和Spring-DI(IOC分析、IOC设计实现、DI分析、DI实现)

    一.IOC分析 1. IOC是什么? IOC:Inversion of Control控制反转,也称依赖倒置(反转) 问题:如何理解控制反转? 反转:依赖对象的获得被反转了.由自己创建,反转为从IOC ...

  4. 纯手写SpringMVC到SpringBoot框架项目实战

    引言 Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 通过这种方式,springboot ...

  5. 闭关修炼180天--手写IOC和AOP(xml篇)

    闭关修炼180天--手写IOC和AOP(xml篇) 帝莘 首先先分享一波思维导图,涵盖了一些Spring的知识点,当然这里并不全面,后期我会持续更新知识点. 在手写实现IOC和AOP之前(也就是打造一 ...

  6. 手写一个springboot starter

    springboot的starter的作用就是自动装配.将配置类自动装配好放入ioc容器里.作为一个组件,提供给springboot的程序使用. 今天手写一个starter.功能很简单,调用start ...

  7. 【spring】-- 手写一个最简单的IOC框架

    1.什么是springIOC IOC就是把每一个bean(实体类)与bean(实体了)之间的关系交给第三方容器进行管理. 如果我们手写一个最最简单的IOC,最终效果是怎样呢? xml配置: <b ...

  8. 利用递归,反射,注解等,手写Spring Ioc和Di 底层(分分钟喷倒面试官)了解一下

    再我们现在项目中Spring框架是目前各大公司必不可少的技术,而大家都知道去怎么使用Spring ,但是有很多人都不知道SpringIoc底层是如何工作的,而一个开发人员知道他的源码,底层工作原理,对 ...

  9. 利用SpringBoot+Logback手写一个简单的链路追踪

    目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...

随机推荐

  1. JS - 有趣的面试题

    for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } //这个例子执行完输出什么结果 ...

  2. [ASP.NET Core开发实战]基础篇04 主机

    主机定义 主机是封闭应用资源的对象. 设置主机 主机通常由 Program 类中的代码配置.生成和运行. HTTP项目(ASP.NET Core项目)创建泛型主机: public class Prog ...

  3. 由mv命令引发的对inode的思考

    一场机器迁移引起的思考 最近团队一台机器老化了,准备做全量迁移,一不小心,就把100多个G的/data目录放到了新机器的/data/data目录下,上愁了,怎么削减一层data目录呢?难倒像Windo ...

  4. c++ binding code generator based on clang

    google it http://www.swig.org/Doc3.0/CSharp.html http://samanbarghi.com/blog/2016/12/06/generate-c-i ...

  5. python爬取拉勾网职位信息-python相关职位

    import requestsimport mathimport pandas as pdimport timefrom lxml import etree url = 'https://www.la ...

  6. 从通达信导出文件获取A股所有股票代号名称(至2020年2月24日)

    下文是讲述如何从通达信的输出文件中获得股票信息,如果想用Java爬虫从网页爬取信息请参考:https://www.cnblogs.com/xiandedanteng/p/12808381.html 要 ...

  7. 图解冒泡排序及算法优化(Java实现)

    冒牌排序 基本思想 定义:冒泡排序的英文是bubblesort,它是一种基础的交换排序 原理:每次比较两个相邻的元素,将较大的元素交换至右端 (升序排序) 思路:相邻的元素两两比较,当一个元素大于右侧 ...

  8. 虚拟PWN初探

    前言 之前看到星盟Q群里面的消息,Freedom师傅在B站直播关于虚拟pwn入门的公开课,然后就去听了一波,感觉受益匪浅.之前一直以为虚拟pwn是超级复杂的东西,今年打比赛也遇到了好几次,一直无从下手 ...

  9. docker下jira数据备份和还原注意路径

    重点:jira页面上的备份与恢复页面的路径,跟我实际路径是有出入的,如果找不到就用find去搜下备份文件就知道怎么操作了 1.登录jira后,右上角的系统——左侧的导入与导出——选择里面的备份与恢复 ...

  10. zepto | 用事件委托去解决无法给新增添的DOM添加事件的问题

    前段时间在做一个任务的时候,碰见了一个问题:zepto无法用on事件去监听新增加的dom事件.这个问题用live可解决, 但是live在ios下失效,为了解决这个问题,我采用了暴力的方法去解决,每次添 ...