手寫「SpringBoot」近況:IoC模組已經完成

  • 2020 年 10 月 5 日
  • 筆記

jsoncat: //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