spring 相信大家都应该并不陌生,现在应用也相对来说比较广泛了,有些大厂也对spring进行了改版,从而更加贴合自己的业务场景。剩下的就是攻城狮的CRUD了,可能有些人(比如我)仅仅只是停留在会用的地步,对spring的内部结构以及原理可能都不是很了解,遇到很多的问题异常有时候只会一脸蒙蔽,不知所措,直接找度娘解决。很显然这样的方式其实是不对的,当然应付一些日常的开发,是没有任何问题的。但是一旦出现一些奇怪的异常或者哪个地方配置有问题,就不知道问题的原因在哪?这样往往会消耗很多的时间,有时候可能仅仅是因为配置写错地方了或是遗漏了某个配置等等,如果对spring的工作原理不了解,那么这样其实是不科学的,无论对整个职业生涯的发展,还是其他都是不利的。我们只有了解了本质(俗话说:万变不离其宗),那么无论怎么改变什么问题,都知道为什么,该如何解决了。现在有很多的大厂都有自己的框架的,如不知道spring的底层工作原理,显然是不行的,更不要说去调整框架了。作为一个攻城狮仅仅会CRUD是不行的(知其然,也要知其所以然)
好了,话不多说了,今天跟大伙来交流我对Spring的一点点认识吧!
spring 能给我们带来什么? 为什么用spring,spring的优势是什么?
用过spring 的人应该都了解,很直观的一个感受就是spring 能够简化开发。我记得我刚毕业那时候spring还没有流行,用的是struts2框架,数据层还需要自己手写dao层创建连接,前端还需要写一些action等,总之一套流程下来花费的时间都在处理一些跟业务无关的事情,但是有必须得去做,很显然这是不符合敏捷开发的规范(专注于业务的开发)。当spring出现了的时候很多的内容直接就简化了,许多的内容进行配置化,使得整个项目的重心都只要专注于业务逻辑的开发了,感觉很大化的实现了高内聚低耦合例如(spring提供了IOC/DI,AOP, MVC 等)
其中Spring 的几个最重要就是 :IOC(控制反转) ,AOP(面向切面编程) ,DI (依赖注入)
三者的关系是:
Spring的架构图组成(网上找的图 ^ - ^ )
大致说一下最基本的7个模块之间的关系(核心思想就是:控制反转(IOC),依赖注入(DI),面向切面编程(AOP))
Spring - MVC的工作的基本流程是怎样的? (个人认为熟悉这个图对理解spring还是很有帮助的,至少能spring知道入口)
好了,接下来开始讲解下spring的基本实现思路了(这一次仅仅是实现了一个简单版的spring,其中的AOP ,MVC 都暂为实现的,后期继续)
1、配置阶段
1.1、web.xml 配置 (入口方法)
1.2、设置参数
1.3、配置注解(Annotation)
2、初始化阶段
2.1、调用初始化方法Init() 加载配置文件(包/类路径等)
2.2、IOC容器初始化 (定义一个集合Map<String,Object>)
2.3、扫描类 (scan.package= "com.springDemo.xxx")
2.4 、将类实例化存入IOC容器中(通过反射的机制)
2.5、执行DI操作,将未赋值的属性赋值
2.6、初始化HandlerMapping.根据URL 与Method的映射 (Map<String,Method>)
根据IOC容器,循环遍历将将带有注解的类,以及方法Method存入map中
3、运行阶段 (这一阶段需要注意的就是:参数需要处理好,形参,实参的对应关系维护好)
3.1、doPost() / doGet() 获取请求对象(Request,Response)
3.2、根据请求Request获取请求的URL,去HandlerMapping中找到对应的Method方法
3.3、通过获取的Method 方法,利用反射机制执行该方法
3.4、将执行Methodf方法返回的值写入Response(response.getWrite.write()),返回到前端
---------------未完待续
注:感谢GP学院的Tom老师