看过Spring5源码的同学们,一开始肯定会边看边去用断点进行源码调试,调试来调试去时间长了肯定会晕车的,最有效的方式是先猜测后进行验证,当然猜测是建立在对阅读源码相当有经验的基础上的,否则也是一头雾水。对于使用很长时间Spring框架的开发者来说,应该对其架构和结构不会太陌生,可以大胆地进行猜测。
根据源码猜测,整理了迷你版Spring的基本实现思路,如下图:
一、web.xml配置文件
所有依赖于Web容器的项目,基本都是从web.xml文件开始的,首先我们先配置好web.xml的文件内容,代码如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
SyDispatcherServlet是模拟的Spring实现的核心类,后面会讲解具体的实现源码的。
二、配置application.properties
无论是xml、properties、yml都是配置文件的表现形式,无论格式怎样变化,其表现的内容大致上是没有什么变化的。具体的内容如下:
1 | scanPackage=com.sy.sa |
三、自定义注解Annotation
3.1 @SyAutoWired
1 | package com.sy.sa.framework.annotation; |
3.2 @SyController
1 | package com.sy.sa.framework.annotation; |
3.3 @SyRequestMapping
1 | package com.sy.sa.framework.annotation; |
3.4 @SyRequestParam
1 | package com.sy.sa.framework.annotation; |
3.5 @SyService
1 | package com.sy.sa.framework.annotation; |
四、配置注解Annotation
4.1 IDemoService接口
1 | public interface IDemoService { |
4.2 DemoServiceImpl实现类
1 | public class DemoService implements IDemoService { |
4.3 DemoController类
1 | @SyController |
五、自定义SyDispatcherServlet的实现
5.1 覆盖实现HttpServlet中的init()方法
1 | /** |
5.2 Handler类
保存url和method的对应关系,代码如下:
1 | package com.sy.sa.framework.handler; |
5.3 doPost()/doGet()方法
1 | @Override |
doPost()方法中使用了委派模式,委派模式的代码逻辑在doDispath()方法中。
至此,迷你版Spring的基本思路代码实践就完成了。