当用户发送请求 咱这个项目是怎么个流程呢?
- http的三次握手----?四次挥手?
- 为什么要三次握手?
- 四次挥手又是个什么玩意?
为什么要四次挥手呢?
这里是引用
Spring源码解析
客户端发送请求------http://localhost:8080/项目名字/接口请求
- 1.浏览器 先将域名转为ip地址(第一步,在计算机本地的hosts文件中找域名对应的ip 如果没有找到的话,那就去dns服务器中去找。将对应的域名装为ip地址)
- 2.获取ip地址后,就能找到网络中的具体计算机了,然后根据端口号,找到对应计算机的对应端口号的程序 也就是Tomcat 这时候Tomcat启动
- 3.Tomcat启动后会根据Tomcat的部署文件进行部署,也就是进入项目文件中
- 4.进入项目文件中会找到web.xml(Spring-MVC)创建一个Spring容器或者是启动主方法(Spring-boot)直接创建一个Spring容器。
- 5.创建完Spring容器之后会根据web.xml配置文件中的Spring-mvc.xml的路径找到这个xml文件,且找到需要进行注解扫描的包(SpringMVC)找到@Controller注解或者什么@Bean注解 @Service @Component等,把这些类new一个对象 放在Spring容器中 这个Spring容器其实就是一个Map集合,他的key就是Bean的名字,他的value就是Bean的对象
- -------如何放在SPring容器中的呢?Spring底层是把每一个元素分别转换为一个BeanDefinition对象,其中保存了从配置文件中读取到该Bean的各种信息,然后通过BeanFactory对Bean进行注册,等到我们用的时候,直接对着Bean工厂也就是BeanFactory给一个类型,这个工厂直接返回一个Bean对象,当然,这种情况是属于单例Bean
- 6.Spring容器中有对象了,然后我们在使用,如何使用?使用依赖注入(针对的类的一个特定属性,所以是一次操作(一个)),或者 是自动装配(针对的是一个类下的所有属性(所以可能是多个),所以是一次批量操作(多个))
- 7.Bean的初始化前(@PostConstrut) 初始化(Initinlizing接口) 初始化后(AOP)如果使用Aop的话 会使用代理设计模式 生成一个代理对象 ,这个代理对象就是一个普通对象,他底层是通过继承普通对象 ,且实现普通对象的方法,但是代理对象中有一targrt属性 ,这个target属性是Bean对象(有数据的对象)
AOP:面向切面 —面对交叉逻辑的情况,把一个东西封装成一个切面,直接注入到对象中,使这个对象或者方法增强 但是 只能是Public
权限:Public 所有类可见 protected 对子类可见 对本类可见 private 对本类可见 - 8.Bean初始化完毕,Spring会使用适配器进行适配,适配出@Controoller
这个@Controller对象会根据路由上的地址进行查找 ,底层是通过反射,循环便利这个方法,且看一看他有没有这个注解,有的话,查看这个注解的参数值与路由对不对应,对应的话,直接运行这个方法。 - 9.运行这个方法,会返回一个ModelAndView对象,或者是直接返回给前端一个JSON值,如果是ModelAndView对象会给试图解析器,试图解析器会根据这个对象返回一个试图 也就是view给前端控制器,前端控制对其进行渲染,且传给前端做响应