從零開始實現一個簡易的Java MVC框架

zzzzbw發表於2018-07-04

前言

最近在看spring-boot框架的原始碼,看了原始碼之後更是讓我感受到了spring-boot功能的強大。而且使用了很多的設計模式,讓人在看的時候覺得有點難以下手。

不過仔細瞭解了一段時候發現,其實他的原理是很簡單的,所以想要自己也動手實現一個功能類似的框架。一方面可以讓自己在細節部分了解更深入,另一方面也可以給其他和我一樣想要了解spring-boot原理,但是卻被他複雜的設計模式嚇到的人提供一些參考。

當然自己動手確實很難做到和spring-boot那樣強大的功能,而且也為了避免過於使用設計模式而造成程式碼變得繁雜,我簡化了很多過程和功能,使得主要的實現思想更容易得到理解。

本文會一步步講解這個框架的實現過程,同時也會提及一些spring中經典的程式碼或者問題。

框架程式碼已經完成,如果不想看文章的話可以直接看我的專案程式碼,GitHub:doodle

主要實現功能:

  • Bean容器
  • IOC
  • AOP
  • MVC

目錄

框架成果

我們直接看一下完成之後的效果吧。

package com.sample.controller;

import ...

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public ModelAndView getUserList() {
        List<User> list = userService.getUser();
        return new ModelAndView().setView("user_list.jsp").addObject("list", list);
    }

    @RequestMapping(value = "/detail", method = RequestMethod.GET)
    public ModelAndView getUser(@RequestParam(value = "id") long id) {
        User user = userService.getUserById(id);
        return new ModelAndView().setView("user_detail.jsp").addObject("user", user);
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public Result<User> addUser(@RequestParam(value = "name") String name) {
        User user = userService.addUser(name);
        return new Result<>(user, 0, "");
    }

    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    @ResponseBody
    public Result<String> deleteUser(@RequestParam(value = "id") long id) {
        userService.deleteUser(id);
        return new Result<>("success", 0, "");
    }
}
複製程式碼

看UserController這個類不知道的以為這是一個spring-boot專案,但是這個確實沒有引用spring,而是自己實現的框架。再通過我們的starter就可以啟動內建的tomcat的伺服器,訪問我們的網站了。這一切都和spring-boot相似

package com.sample;
import ...

public class App {
    public static void main(String[] args) {
        Doodle.run(App.class);
    }
}
複製程式碼

接下來幾篇就會講解這個框架是如何實現的。

結語

本專案不僅參考了spring-boot,同時還參考了:

這些都是國人寫的更輕量而且也很優秀的框架,相比spring-boot來說閱讀原始碼的難度會小一些。感謝這些框架給我提供學習的思路,同時給我們更多的選擇。


原文地址:從零開始實現一個簡易的Java MVC框架

相關文章