博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始实现一个简易的Java MVC框架
阅读量:7048 次
发布时间:2019-06-28

本文共 2028 字,大约阅读时间需要 6 分钟。

前言

最近在看spring-boot框架的源码,看了源码之后更是让我感受到了spring-boot功能的强大。而且使用了很多的设计模式,让人在看的时候觉得有点难以下手。

不过仔细了解了一段时候发现,其实他的原理是很简单的,所以想要自己也动手实现一个功能类似的框架。一方面可以让自己在细节部分了解更深入,另一方面也可以给其他和我一样想要了解spring-boot原理,但是却被他复杂的设计模式吓到的人提供一些参考。

当然自己动手确实很难做到和spring-boot那样强大的功能,而且也为了避免过于使用设计模式而造成代码变得繁杂,我简化了很多过程和功能,使得主要的实现思想更容易得到理解。

本文会一步步讲解这个框架的实现过程,同时也会提及一些spring中经典的代码或者问题。

框架代码已经完成,如果不想看文章的话可以直接看我的项目代码,GitHub:

主要实现功能:

  • 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
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
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,同时还参考了:

这些都是国人写的更轻量而且也很优秀的框架,相比spring-boot来说阅读源码的难度会小一些。感谢这些框架给我提供学习的思路,同时给我们更多的选择。


原文地址:

转载地址:http://crpol.baihongyu.com/

你可能感兴趣的文章
Java模拟Delegate
查看>>
记录下,我们平时开发当中不得不知道的HTTP状态码
查看>>
HDU-1045 Fire NetFire Net 最大团
查看>>
VC++6.0 按F1无法打开 MSDN 的解决办法
查看>>
Eclipse自动部署项目到Tomcat的webapps下的有效方法
查看>>
Extjs4快速上手三——实现主界面
查看>>
如何替代Flex?
查看>>
控制属性修改时间,控制时间,联合主键
查看>>
android-包签名
查看>>
Android开发和调试必备工具-SDK Tools
查看>>
【LeetCode】107. Binary Tree Level Order Traversal II (2 solutions)
查看>>
《微软的软件测试之道》读书笔记 之 结构测试技术
查看>>
ASP.NET中Session的个人浅谈
查看>>
数学图形之Kuen Surface
查看>>
统计图表类型选择应用总结&表数据挖掘方法及应用
查看>>
【故障处理】CRS-1153错误处理
查看>>
快来熟练使用 Mac 编程
查看>>
ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
查看>>
MVC5 + EF6 简单示例
查看>>
Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
查看>>