asp.net mvc项目实例_降龙-第13章:MVC开发准备

6c2d37f9240d81f19d4e9dd3b188ef4d.png

从这一章开始我将逐步研发一个MVC框架并内嵌在​我的开源项目中。由于内容会很多,所以我尽量拆分成多个章节来介绍,以展示框架研发的过程和一些​细节。

8953da31951c01cc3f2dac067c5862d7.png

上面上传的代码是整套MVC框架设计的起点,这些都是我们在spring中常见的注解类,声明好这些类后,在实际开发过程中我们就可以利用这些注解来生生成单例实例并交由spring管理了,在研发的这套框架中在能完成正常的业务开发需求之上,还简化了了很多繁琐的设计,然后还给自己的这一套注解类起了一个响亮的别名:My*系列。

一般的我们都是按照这样的结构设计​项目的包目录的:

309ea2ccd3787f19fb01823ec0eacf68.png

只要有统一的父节点,包目录分散的都不要紧,无非就是在扫描包的时候消耗一点性能,多扫一些无用的类罢了​。设计好包目录结构后,再来配置一下扫描规则,​如下图所示:

3d3bb8531378a991880618f68ee373a1.png

四个类型的包扫描配置,用数组的形式配置,支持你分散设计包的目录结构,没有任何限制,配置也很简单。

下面我就按照我对spring的理解来分析一下整个spring项目的网状交叉依赖关系是怎么启动和注入完成的​。因为我的分析是直接给出的结论并没有叙述思考问题的角度及得出结论的过程,所以会让人看起来觉得很简单,但是实际实现起来细枝末节的问题很多。

dao层扫描

首先根据我们多年开发的经验知道,dao层代码一般都是只定义接口类和方法,不会有交叉bean的引入的,所以第一步我们要先扫描dao层下的所有接口类。这里唯一和别的类不同的区别是dao的实例是动态代理实例,就是最终代码在调用接口方法时会监听该方法并由框架处理接口的实现。

service层扫描

把dao层下的所有接口扫描完,装载到内存中,按照完整类名作为key,实例对象作为value存入到dao的map缓存中,然后开始扫描servcie层下的包。由于servcie层包确认是不会引入controller层的bean的,所以处理起来会相对简单一点。

考虑到service层会依赖互相注入service层bean还会注入一些帮助类的bean,所以就得扫描自身类的同时继续通过反射把类的成员变量中的所有bean也扫描出来。拿到类的成员变量后根据类名去对应类型的缓存中查询下是否当前类的bean已经存在,​然后处理好创建和赋值操作。当类的成员变量也是bean且没有在缓存中存在实例,则继续对成员变量做扫描,直至扫描到最后一个bean为止。

controller层扫描

controller扫描还需要校验url不能重复,url上的注解不能为空等,也就这些和别的扫描有些区别。然后还需要把url和controller的方法映射存储起来,因为在做反射调用的时候是根据url来寻找controller类实例来执行对应方法的​。

component层扫描

这一层其实嵌套在service层内实现,也可以嵌套在controller内,在扫描上面的包的过程中扫描到component就已经完成了其bean的生成和注入了。

请求调度

整个所有的bean扫描完成后,就可以交由mvc的servlet调度控制类来做调度了。写一个servlet类拦截所有servlet请求,交由mvc控制其任务的调度、务的控制、参数包装、结果返回以及异常处理​。这样整个mvc的​部分就算开发完了。

特别的,dao层的使用一般我们还需要借助xml文件来存储sql文件,这是一个很方便书写、管理和移植拓展的解决方案。所以在mvc框架开发的最后一步就是把前期手写的字符串SQL替换为xml的mapper文件来处理​。而这个我也会单独​出章节来讲。在java最新的版本中已经支持字符串模板的写法了,它支持一段字符串的直接所见即所得的写法,非常适合写html和sql文件,到时候我在看下能不能走这条路来支持sql这一块的解析。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

waf可以检测哪个端口的流量_锐速云:CC防御过程中,WAF的主要特点有哪些?

一部分网站和游戏,以及金融的企业网站负责人员对于流量攻击应该属于耳熟能详。对此问题一直也是他们最头疼的。因此在解决DDoS攻击和CC攻击防御的过程中,运用了WAF指纹识别架构去做相对应的权限策略,以此避免误封正常的用户访问请求。这里的W…

frame中src怎么设置成一个变量_自动格式化打印变量HMLog介绍

作者 | mao2020来源 | 掘金,点击阅读原文查看作者更多文章前言在我初学iOS的时候,经常需要NSLog打印用于调试,有时候还需要打印多个变量:NSLog("xxxx frame% tag%ld isHidden%d", NSStringFromCGRect(view.frame), view…

电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...

四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx 计算机组成原理(0023)第二次形考作业四川电大形成性测评系统 课程代码5110023 参考资料 、单项选择题(共 7 道试题,共 35 分。)1. 组成一个运算器需要多个部件,但下面所列_…

android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP

如今手机使用的频率越来越高,感觉每一个人都是“低头族”。既然我们都离不开手机,那我们何不利用手机来学习法语呢?今天我就跟大家推荐一些超级好用的各类法语APP,每个APP会注明IOS系统和android系统是否兼容。提高dicte和单词拼写…

北斗通信运营商_国内首个“北斗+5G”应用方案发布 配套5G产品将于年底量产上市...

北京合众思壮科技股份有限公司研发的各类北斗导航应用终端 郭超凯 摄北京合众思壮科技股份有限公司研发的各类北斗导航应用终端 郭超凯 摄中新网郑州9月10日电 (郭超凯)中国卫星导航与位置服务第八届年会10日在郑州召开,北京合众思壮科技股份有限公司(以下简称合众思…

Redis-运维

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据: Repl…

python括号的区别_Python中类-带括号与不带括号的区别

类不带括号我们叫赋值,带括号我们叫实例化。 什么是赋值? a7 ba id(7) 140726814208448 id(a) 140726814208448 id(b) 140726814208448 从上面例子中我们可以看出变量a赋值7、b赋值a,它们的内存地址都是相同的。 它们是指向了同一个内存地址&…

初中教师资格证计算机试讲教案模板,教案模板:教师资格证面试初中英语万能教案模板...

【摘要】授课是一门艺术,好的授课方式可以使学生举一反三,培养学生自主学习能力。此时,课前的教案准备工作就极为重要。那么如何写出一篇好的教案呢?考必过为大家精心整理了教案模板:教师资格证面试初中英语万能教案模…

idea yml文件不变成树叶_springboot获取配置文件的三种方式

hello,大家好,有今天没有写文章了,因为呢,最近,公司有点事情,需要我呢,搭建一个demo,框架呢是springbootActive实现消息的延时发送和定时发送功能,为了项目以后中使用到&…

python3.7代码_Centos7源代码安装python3.7,centos7,源码,python37

1、centos7默认安装python2.7,不需要卸载; 2、安装gcc; 3、安装依赖包: yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-deve…

小米相机摄像头测试软件,摄像头拍照效果测试

◆ 摄像头拍照效果评测摄像头已成为时下任何一款手机都应该有的基本设备了,经过几年的发展,目前主流智能手机所配备的摄像头俨然到达了动辄500W像素以上的级别,而旗舰产品基本都会配备一颗不失体面的800W像素以上的摄像头。小米手机也搭配了一…

电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办

电脑关机后自动重启的问题,一直困扰一些朋友,通常就是关闭系统后,电脑又自己开机启动了,我们不得不拔掉电源或强制关机,要解决电脑无法关机变重启的问题就要找到原因然后解决,下面,小编讲处理电…

计算机技能节活动作文,技能节感想作文

技能节感想作文在日常学习、工作和生活中,大家都跟作文打过交道吧,作文可分为小学作文、中学作文、大学作文(论文)。那么你知道一篇好的作文该怎么写吗?下面是小编为大家收集的技能节感想作文,欢迎大家借鉴与参考,希望…

神舟笔记本电源管理软件_笔记本电脑是一直插着电源好,还是拔了电源好?

你说怎么好刚才写【图吧小白教程】散热常识 的时候参考了一些资料,为此咱跑了不少网站关注了不少公众号,这年头有意思,干啥都要关注微信,然后就能拿到资料,我寻思我写这么多文章也没打算给咱自己的微信公众号引流呢&am…

matlab中服从高斯分布的矩阵_一些张量的计算步骤matlab代码

Matlab工具箱Tensor Toolbox,安装链接如下CSDN-专业IT技术社区-登录​blog.csdn.net. ,这是我们定义的张量 ,matlab代码:%% %工具包:Tensor Toolbox clc clear all X1 1:12; X1 reshape(X1,[3,4]); X2 13:24; X2 reshape(X2,[3,4]); %如何用矩阵拼接…

徐波 博士 计算机,徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术...

原标题:徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术编者按:近年来,人工智能(AI)技术在医学领域得到广泛应用。在肿瘤精准治疗时代,AI技术的应用进一步促进了肿瘤患者个体化精准治疗。在第五届…

aspx 判断字符串是否为decimal_python 经典面试题:判断字符串括号是否闭合{}[]()...

前言经典面试题:判断一个字符串里面的括号是否闭合,如:{[{()}]()} 就是一个闭合的字符串。{{()}]} 这个里面 ([)] 括号不对称,这种就是不闭合。python判断闭合解决基本思路:先把左括号添加到一个列表里面,遇…

c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)

DEV C是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易。在DEV C编码界面中可以使用复制和粘贴等命令,这提高了开发效率。2.3.1安装DEV C要安装DEV C ,步骤如下。(1)在百度中搜索DEV C安装包,双击可执行的exe文件进行安装,首先弹出选择…

@value注解_Java系列之注解

Java 注解(Annotation)又称之为 Java 标注、元数据,是 Java 1.5 之后加入的一种特殊语法,通过注解可以标注 Java 中的类、方法、属性、参数、包等,可以通过反射原理对这些元数据进行访问,注解的使用不会影响…

磁共振线圈分类_收藏:磁共振检查序列及临床应用总结

磁共振检查要用到序列,什么是磁共振序列(Sequence)呢? 序列,简单的讲是指具有一定带宽、一定幅度的射频脉冲与梯度脉冲的有机组合。而射频脉冲与梯度脉冲不同的组合方式构成不同的序列,不同的序列获得的图像有各自的特点。磁共振序…