Spring IOC、DI、MVC核心原理

配置阶段

  • web.xml –> DispatcherServlet
  • init-param–> contextConfigLocation classpath:application.xml
  • url-pattern–> /*

初始化阶段

  • init –>加载配置文件
  • IOC容器初始化–>Map

运行阶段

  • doPost/doGet–>request/response
  • 从HandlerMapping去匹配–>找到Method、通过反射机制invoker,再讲返回的结果交付
  • invoker
  • response.getWrite()

多说两句

IOC初始化阶段

  1. BeanDifinition的Resource定位

    • FileSystemResource:以文件的绝对路径方式进行访问资源,效果类似于Java中的File;
    • 以类路径的方式访问资源,效果类似于this.getClass().getResource(“/”).getPath();
    • ServletContextResource:web应用根目录的方式访问资源,效果类似于request.getServletContext().getRealPath(“”);
    • UrlResource:访问网络资源的实现类。例如file: http: ftp:等前缀的资源对象;
    • ByteArrayResource: 访问字节数组资源的实现类。
  2. BeanDifinition的载入与解析
    • 官方文档中对BeanDefinition的解释如下:
        A BeanDefinition describes a bean instance, which has property values, constructor argument values, and further information supplied by concrete implementations.
    • BeanDefinition相当于一个数据结构,这个数据结构的生成过程是根据定位的resource资源对象中的bean而来的,这些bean在Spirng_IoC容器内部表示成了的BeanDefintion这样的数据结构,IoC容器对bean的管理和依赖注入的实现都是通过操作BeanDefinition来进行的。
  3. BeanDifinition在Ioc容器中的注册
    • 最终Bean配置会被解析成BeanDefinition并与beanName,Alias一同封装到BeanDefinitionHolder类中, 之后beanFactory.registerBeanDefinition(beanName, bdHolder.getBeanDefinition()),注册到DefaultListableBeanFactory.beanDefinitionMap中。
    • beanDefinitionMap是一个concurrentHashMap

DI

  1. 什么是DI

    • Dependence Injection依赖注入(DI是IOC的一种具体实现):解决主键之间的装配问题
  2. Spring中DI的实现方式
    • 基于xml的DI(Dependency Injection)
    • 属性(setter)注入

      <bean id="cardb" class="com.xdl.demo.Card" >
      <property name="suits" value="红桃"></property><!-- name:属性名,value:为属性赋值 -->
      <property name="point" value="K"></property>
      </bean>
    • 构造器注入

      <bean id="player" class="com.xdl.demo.Player">
      <constructor-arg index="0" value="小马哥"></constructor-arg> <!-- 形参,index下标 -->
      <constructor-arg index="1" value="18"></constructor-arg>
      <constructor-arg index="2" ref="cardc"></constructor-arg><!-- ref:对象 -->
      </bean>
    • 命名空间注入
    • 集合属性注入[List、Set、Map]
    • list

      <bean id="cardb" class="com.xdl.demo.Card" >
      <property name="list">
      <list>
      <value>wj</value>
      <value>sj</value>
      <value>zj</value>
      </list>
      </property>
      </bean>
    • set

      <bean id="cardb" class="com.xdl.demo.Card" >
      <property name="set">
      <set>
      <value>wj</value>
      <value>sj</value>
      <value>zj</value>
      </set>
      </property>
      </bean>
    • map

      <bean id="cardb" class="com.xdl.demo.Card" >
      <property name="map">
      <map>
      <entry key="123">
      <value>hello</value>
      </entry>
      <entry key="124">
      <value>hella</value>
      </entry>
      </map>
      </property>
      </bean>
    • 基于注解的DI
    • 配置component-scan路径,扫描对应的包

注解的理解

  1. 注入方法

    • constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。
    • byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。–>@Resource(jdk)
    • byType:查找所有的set方法,将符合符合参数类型的bean注入。–>@Autowired(Spring)/@Inject
  2. 注册bean的注解
    • @Component:可以用于注册所有bean
    • @Repository:主要用于注册dao层的bean
    • @Controller:主要用于注册控制层的bean
    • @Service:主要用于注册服务层的bean

Spring原理以及流程相关推荐

  1. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

  2. Spring MVC请求处理流程分析

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Spring MVC框架在工作中经常用到,配置简单,使用起来也很方便,很多书籍和博客都有介绍其处理流程,但是,对于其 ...

  3. 统一用户认证和单点登录和授权的原理与流程

    统一用户认证和单点登录和授权的原理与流程 1 前言 2 介绍 2.1 统一用户认证 2.2 单点登录 2.3 授权 3 原理 3.1 统一用户认证原理 3.2 单点登录原理 3.3 OAuth授权原理 ...

  4. spring原理 struts2原理 hibernate原理 MyBatis原理 SpringMVC

    Spring原理 最核心的就是IOC,动态注入DI,利用java里的反射,让一个对象的创建不用new了,可以自动的生产.Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调 ...

  5. Spring原理-IOC控制反转

    spring相关文章 Spring原理-IOC控制反转 Spring框架七大核心模块 Spring Beans原理–bean生命周期 一.Spring概述 1. 定义 Spring是一个轻量级Java ...

  6. Spring原理(二)--循环依赖原理

    此篇文章建立在已经了解bean创建原理之上,若不了解,请先阅读本人上一篇文章 Spring原理(一)–IOC原理 1 场景 @Component public class X {@AutowiredY ...

  7. SSM三大框架+SpringMVC的工作原理及其流程

    SSM三大框架+SpringMVC的工作原理及其流程 一.SSM中各层作用及关系 1.持久层:DAO层(mapper层)(属于mybatis模块)     DAO层(Mapper层):主要负责与数据库 ...

  8. Spring原理篇(2)--BeanPostProcessor or BeanDefinition or Aware or InitializingBean

    @TOC# Spring系列 记录在程序走的每一步___auth:huf 拨开云雾见天日 守得云开见月明 Spring关健实现 简化版 以下实现均为简化版本;有助于帮助记忆; 该版本代码有部分缺陷 例 ...

  9. ARKit从入门到精通-ARKit工作原理及流程介绍

    2017-06-15 坤小 Cocoa开发者社区 转载请注明出处:http://www.jianshu.com/p/0492c7122d2f 1.1-写在前面的话 1.2-ARKit与SceneKit ...

最新文章

  1. 论文《城市大脑的定义与建设规范探讨》在IEEE(ICBAIE)发表
  2. 数据结构和算法学习一,开篇
  3. java常见类加载器,面试必备
  4. Linux 备份系统重要服务的配置文件脚本
  5. go uint64 转 字符_Go的基本数据类型入门看这一篇就差不多了
  6. php停车场计时收费软件,城市街道停车计时收费系统 路边停车收费软件
  7. windows mac 安装lua
  8. mysql 关联查询_mysql数据库调优(二)
  9. Excel 2003 实用技巧 (FROM MSDN)
  10. Windows 8轻松用系列
  11. 物体重心的特点是什么_确定物体重心位置的常用方法是什么呢?
  12. 管路流体仿真matlab,MathWorks 在 Simscape 中新增建模和仿真流体系统功能
  13. 编程的宗派(OOP与FP孰优孰劣)--王垠
  14. JAVA实现Excel文件的导入导出
  15. 【Red Team——基础】通过钓鱼攻击获得访问权限
  16. R语言与克朗巴哈alpha系数
  17. 阿里最全面试116题整理
  18. 2018年,中国空气质量在全球的排名,你一定想不到!
  19. Modern source-to-source transformation with Clang and libTooling
  20. uniapp+egg.js+react实现全栈笔记App

热门文章

  1. 如何禁止一个进程运行的方法(亲测成功)
  2. Windows10 配置 Android SDK 环境变量
  3. python wasm_WASM逆向分析
  4. 华为手机发布鸿蒙系统,华为发布鸿蒙系统,默认的纯净模式实则还是资本的剥削?...
  5. oracle行转列、列转行总结
  6. 移动端页面背景图问题
  7. 冬季宝宝饮食注意事项来啦
  8. linux下怎么网络抓包
  9. 网络抓包原理及Fiddler的使用
  10. 迅雷网络中南大学2010年笔试试题