摘要:不过仔细了解了一段时候发现,其实他的原理是很简单的,所以想要自己也动手实现一个功能类似的框架。原文地址从零开始实现一个简易的框架
前言
最近在看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框架
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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引入一些需要的...
阅读 1845·2021-11-25 09:43
阅读 3687·2021-11-24 10:32
阅读 1075·2021-10-13 09:39
阅读 2327·2021-09-10 11:24
阅读 3343·2021-07-25 21:37
阅读 3463·2019-08-30 15:56
阅读 857·2019-08-30 15:44
阅读 1447·2019-08-30 13:18