博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手写spring
阅读量:4037 次
发布时间:2019-05-24

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

1、自定义controller、service、requestParam、autowired、requestMapping注解类

示例:

@Target({ElementType.TYPE}) //指定此注解作用范围,TYPE是类 可以不指定

@Retention(RetentionPolicy.RUNTIME) //元注解 用来指定注解的生命周期,有SOURCE/CLASS/RUNTIME, 必须有

@Documented //javadoc文档化 成为注解元素的公共API的一部分 可以不要

public @interface GPController {

String value() default "";

}

 

2、要想实现一个网页的访问,需要创建servlet(源码见下面),继承HttpServlet, web.xml中添加该servlet的配置。

通过重写HttpServlet的init方法来实现spring的加载。

init里面做的事:

1)加载配置文件:

配置文件中指定要扫描的路径,将配置文件加载到Properties中。

2)获取所有类路径:

获取扫描路径下所有的类,将所有类的全路径放到一个List<String>中

3)ioc组装:

遍历2中的List集合,判断每个元素是否有Controller注解,如果有将对象实例化并放到ioc容器中(实际上就是个Map<String, Object> key是类名的首字母小写,value是类的实例),判断每个元素是否有Service注解,如果用户设置了自己的名字就直接按设置的名字进行放到ioc中,如果没有指定名字就按接口类型进行创建实例并放到ioc中

4)对类中的autowired属性(Field)进行赋值:

遍历ioc容器,然后获取每个容器中对象的具有autowired注解的属性,然后获取这个注解的属性名,如果指定了就取指定的,如果没有指定就取类型的名字作为属性名,根据属性名从ioc容器中取出来然后通过Field.set()进行赋值一下属性的值。

5)关联requestMapper与Method的关系:

遍历ioc容器,判断是不是有Controller注解,有的话获取类的RequestMapping的值作为根路径, 然后获取类中所有的公共方法,判断方法是否有RequestMapping注解,有的话取出值并且拼接根路径,将拼接后的路径作为key,Method对象作为value放到一个Map集合中handlerMapping。

至此初始化完成。

 

3、请求进来的时候需要做个拦截处理,判断请求走哪个方法,所以重写doPost方法。

1)获取请求的url

2)判断url是否在handlerMapping中,没有直接返回404

3)根据url从handlerMapping中获取Method

4)根据Method获取方法的参数类型,并且获取所有请求的参数,然后遍历类型将请求的参数封装到Object[]数组中

5)通过Method获取类名,根据类名从ioc中获取类的实例

6)调用Method的invoke方法,将类和参数传入,执行方法

 

示例源码下载地址:

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

你可能感兴趣的文章
Redis中常用命令
查看>>
spring下载
查看>>
读取request流
查看>>
微信消息模板的配置
查看>>
Spring框架结合Quartz实现任务调度实例
查看>>
Quartz Cron表达式 在线生成器
查看>>
struts2中action接收参数的3种方法
查看>>
java获取随机数
查看>>
url中传递中文参数时的转码与解码
查看>>
百度Ueditor设置允许上传的图片格式及大小
查看>>
java图形验证码生成工具类及web页面校验验证码
查看>>
微信菜单的配置
查看>>
移动端的emoji表情符号插入MySQL数据库失败
查看>>
mysql对指定列进行排名
查看>>
Eclipse安装FindBugs插件
查看>>
联想T440怎么把原装Win8或Win10换成Win7系统
查看>>
PowerDesigner将物理数据模型图生成图片
查看>>
PowerDesigner创建物理数据模型(PDM)
查看>>
PowerDesigner:导入SQL脚本
查看>>
PowerDesigner使用教程
查看>>