手寫「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