摘要:不過仔細了解了一段時候發現,其實他的原理是很簡單的,所以想要自己也動手實現一個功能類似的框架。原文地址從零開始實現一個簡易的框架
前言
最近在看spring-boot框架的源碼,看了源碼之后更是讓我感受到了spring-boot功能的強大。而且使用了很多的設計模式,讓人在看的時候覺得有點難以下手。
不過仔細了解了一段時候發現,其實他的原理是很簡單的,所以想要自己也動手實現一個功能類似的框架。一方面可以讓自己在細節部分了解更深入,另一方面也可以給其他和我一樣想要了解spring-boot原理,但是卻被他復雜的設計模式嚇到的人提供一些參考。
當然自己動手確實很難做到和spring-boot那樣強大的功能,而且也為了避免過于使用設計模式而造成代碼變得繁雜,我簡化了很多過程和功能,使得主要的實現思想更容易得到理解。
本文會一步步講解這個框架的實現過程,同時也會提及一些spring中經典的代碼或者問題。
框架代碼已經完成,如果不想看文章的話可以直接看我的項目代碼,GitHub:doodle
主要實現功能:
Bean容器
IOC
AOP
MVC
目錄從零開始實現一個簡易的Java MVC框架(一)--前言
從零開始實現一個簡易的Java MVC框架(二)--實現Bean容器
從零開始實現一個簡易的Java MVC框架(三)--實現IOC
從零開始實現一個簡易的Java MVC框架(四)--實現AOP
從零開始實現一個簡易的Java MVC框架(五)--引入aspectj實現AOP切點
從零開始實現一個簡易的Java MVC框架(六)--加強AOP功能
從零開始實現一個簡易的Java MVC框架(七)--實現MVC
從零開始實現一個簡易的Java MVC框架(八)--制作Starter
從零開始實現一個簡易的Java MVC框架(九)--優化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() { Listlist = 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 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 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,同時還參考了:
blade
latke
smart-framework
這些都是國人寫的更輕量而且也很優秀的框架,相比spring-boot來說閱讀源碼的難度會小一些。感謝這些框架給我提供學習的思路,同時給我們更多的選擇。
原文地址:從零開始實現一個簡易的Java MVC框架
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71460.html
摘要:接下來就可以把這個切點類加入到我們之前實現的功能中了。實現的切點功能首先改裝注解,把之前改成來存儲表達式。測試用例在上一篇文章從零開始實現一個簡易的框架四實現中的測試用例的基礎上修改測試用例。 前言 在上一節從零開始實現一個簡易的Java MVC框架(四)--實現AOP中我們實現了AOP的功能,已經可以生成對應的代理類了,但是對于代理對象的選擇只能通過指定的類,這樣確實不方便也不合理。...
摘要:服務器相關配置啟動類資源目錄目錄靜態文件目錄端口號目錄目錄實現內嵌服務器在上一章文章從零開始實現一個簡易的框架七實現已經在文件中引入了依賴,所以這里就不用引用了。 spring-boot的Starter 一個項目總是要有一個啟動的地方,當項目部署在tomcat中的時候,經常就會用tomcat的startup.sh(startup.bat)的啟動腳本來啟動web項目 而在spring-b...
摘要:在前面的文章中實現的功能時,目標類都只能被一個切面代理,如果想要生成第二個代理類,就會把之前的代理類覆蓋。改裝原有功能現在要改裝原來的的實現代碼,讓的功能加入到框架中為了讓切面能夠排序,先添加一個注解,用于標記排序。 前言 在前面從零開始實現一個簡易的Java MVC框架(四)--實現AOP和從零開始實現一個簡易的Java MVC框架(五)--引入aspectj實現AOP切點這兩節文章...
摘要:前言在從零開始實現一個簡易的框架七實現中實現了框架的的功能,不過最后指出代碼的邏輯不是很好,在這一章節就將這一部分代碼進行優化。 前言 在從零開始實現一個簡易的Java MVC框架(七)--實現MVC中實現了doodle框架的MVC的功能,不過最后指出代碼的邏輯不是很好,在這一章節就將這一部分代碼進行優化。 優化的目標是1.去除DispatcherServlet請求分發器中的http邏...
摘要:容器實際上就是存放所有的地方,即以及相關信息對應其實體的容器,為什么稱之為呢,因為在中,定義信息和實例的東西叫。了解到這個以后接下來就可以開始編寫容器了,在包下創建一個類叫。獲取容器實例至此,這個容器就完成了。 項目準備 首先確保你擁有以下環境或者工具 idea java 8 maven 3.3.X lombok插件 然后我們創建一個maven工程,編寫pom.xml引入一些需要的...
閱讀 1874·2021-11-25 09:43
閱讀 3700·2021-11-24 10:32
閱讀 1096·2021-10-13 09:39
閱讀 2345·2021-09-10 11:24
閱讀 3360·2021-07-25 21:37
閱讀 3481·2019-08-30 15:56
閱讀 875·2019-08-30 15:44
閱讀 1463·2019-08-30 13:18