Spring的浅识(一)

     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老师

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章