Java_问题(11——20)


11.Ioc控制反转

在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有对象通过彼此的合作,最终实现系统的业务逻辑。即软件系统中对象之间的耦合,这样的话,对象与对象之间有着复杂的联系。为了解耦,所以出现了IOC。


IoC 这个概念。简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IoC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦,如下图所示:

happysneaker.com

即把各个对象类封装之后,通过IoC容器来关联这些对象类。这样对象与对象之间就通过IoC容器进行联系,但对象与对象之间并没有什么直接联系。

happysneaker.com

happysneaker.com

IOC(控制反转)的别名:依赖注入(DI)

所谓依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。

IOC的原理

控制反转是Spring框架的核心,其原理是基于面向对象OO设计原则的The Hollywood Principle:Don't call  us, we will call you.(别找我,我会来找你)。也就是说,所有的组建都是被动的,所有的组件初始化和调用都是由容器负责。组建处在一个容器中,由容器负责管理。简单来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,即在一个类中调用另外一个类。这就是控制反转的概念所在:控制权由代码转到了外部容器,控制权的转移,即所谓反转。


另外Spring的两大主要思想的另一个AOP:面向切面编程:

https://www.cnblogs.com/Wolfmanlq/p/6036019.html


12.Spring工作流程

先上工作流程图:

happysneaker.com


★然后是工作流程,分为8步:

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

      3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法

       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

      7. ViewResolver 结合Model和View,来渲染视图(modelAndView中包含了视图逻辑名和模型数据信息),DispatcherServlet通过ViewResolver完成逻辑视图名到真实视图对象的解析工作。

      8. 将渲染结果返回给客户端(当得到真实对象的view,DispatcherServlet就使用这个view对象对modelAndView中的模型数据进行视图渲染,然后将渲染后的结果返回给客户端)。


(从宏观角度来讲:DispatcherServlet是整个web应用的控制器。从微观来看,controller是单个HTTP请求的控制器,,而modelAndView是HTTP请求过程中返回的模型和视图。)


13.

happysneaker.com


 Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?

    符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。




14.HandlerMapping

处理器映射。

有什么用呢:通过处理器映射,你可以将web请求映射到正确的处理器handler上(handlermapping返回的就是一个handler)。

在基于springmvc的web应用程序中,我们可以为前端控制器DispatcherServlet提供多个handlermapping供其使用,DispatcherServlet将会选用一个优先级最高的handlermapping,若handlermapping返回的是一个可用的handler,那么DispatcherServlet将使用当前返回的handler进行web请求的处理,而不再询问其他的handlermapping,否则DispatcherServlet 将不断轮询其他的handlermapping,直到获得一个可用的handler。

happysneaker.com


那么什么又是DispatcherServlet呢,是SpringMVC提供的前置控制器,所有的请求都经过他来统一分发,在DispatcherServlet将请求发送给SpringController之前,需要借Handlermapping来定位到具体的Controller。


总之Handlermapping的作用一句话:

根据当前请求找到对应的handler,并将handler(执行程序)与一堆handlerInterceptor(拦截器)封装到HandlerExecutionChain对象中。


15.HandlerAdapter

HanlderAdapter:根据handler来找到支持他的HandlerAdapter,通过HandlerAdapter执行这个handler得到modelAndView对象。

springmvc通过handlerAdapter的handler方法来调用请求处理函数。

在DispatcherServlet根据URL利用handlermapping找到对应的handler之后,首先检查当前的IOC容器中所有的可用的HanderAdapter,再利用HandlerAdapter中的supports方法找到可以使用的HandlerAdapter,handlerAdapter是用来执行之前所得到的handler的,然后执行之后就是向DispatcherServlet返回一个modelAndView对象。




PS.拦截器、过滤器:https://zhidao.baidu.com/question/583953960492530045.html



16.Java垃圾回收管理机制(Garbage Collection)

垃圾回收机制的因入可以有效地防止内存的泄露、保证内存的有效使用,也大大解放了程序员的双手,使得我们在编写程序时候,不需要再去考虑内存管理。

内存泄漏:内存泄漏指的是一个内存空间在使用完毕之后未回收,在Java中的一般情况下,是指一个内存对象的生命周期超过了程序需要他的时间长度。


☆然鹅——有了GC也可能出现内存泄漏问题,分为如下三种情况:

i. 静态集合类HashMap、Vector等的使用最容易出现内存泄漏,这些静态变量的生命周期和应用程序一致,所有的Object对象也不能被释放,因为他们也一直被Vector等应用着。

ii. 各种连接,比如数据库连接、网络连接、IO连接等没有显式调用close关闭,不被GC回收导致内存泄漏。

iii. 监听器的使用,在释放对象的同时没有相应删除监听器。


17.关于Java对象引用与对象的区别:

https://blog.csdn.net/qq_26805137/article/details/52945688


18.Ajax

Ajax就是 Asynchronous Javascript And Xml,

Ajax是一种不用刷新网页就能更新页面部分内容的一种动态网页制作技术,

通过在后台与服务器进行部分数据交换,实现网页的异步更新。


19.CDN相当于在终端和服务器之间加了个缓存。


20.

happysneaker.com

另外:当我们使用Ctrl+F5组合键刷新一个页面时,首先是在浏览器端,会直接向目标URL发送请求,而不会使用浏览器缓存的数据;其次即使请求发送到服务端,也有可能访问到的是缓存的数据。所以在HTTP的请求头中会增加一些请求头,它告诉服务端我们要获取最新的数据而非缓存。

happysneaker.com


happysneaker.com


Unity那些事儿
请先登录后发表评论
  • 最新评论
  • 总共0条评论