最近在看spring-boot框架的源码,看了源码以后更是让我感觉到了spring-boot功能的强大。并且使用了不少的设计模式,让人在看的时候以为有点难如下手。java
不过仔细了解了一段时候发现,其实他的原理是很简单的,因此想要本身也动手实现一个功能相似的框架。一方面可让本身在细节部分了解更深刻,另外一方面也能够给其余和我同样想要了解spring-boot原理,可是却被他复杂的设计模式吓到的人提供一些参考。git
固然本身动手确实很难作到和spring-boot那样强大的功能,并且也为了不过于使用设计模式而形成代码变得繁杂,我简化了不少过程和功能,使得主要的实现思想更容易获得理解。github
本文会一步步讲解这个框架的实现过程,同时也会说起一些spring中经典的代码或者问题。spring
框架代码已经完成,若是不想看文章的话能够直接看个人项目代码,GitHub:doodle设计模式
主要实现功能:tomcat
咱们直接看一下完成以后的效果吧。服务器
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类似app
package com.sample;
import ...
public class App {
public static void main(String[] args) {
Doodle.run(App.class);
}
}
复制代码
接下来几篇就会讲解这个框架是如何实现的。框架
本项目不只参考了spring-boot,同时还参考了:jsp
这些都是国人写的更轻量并且也很优秀的框架,相比spring-boot来讲阅读源码的难度会小一些。感谢这些框架给我提供学习的思路,同时给咱们更多的选择。