Spring原理以及流程
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初始化阶段
- BeanDifinition的Resource定位
- FileSystemResource:以文件的绝对路径方式进行访问资源,效果类似于Java中的File;
- 以类路径的方式访问资源,效果类似于this.getClass().getResource(“/”).getPath();
- ServletContextResource:web应用根目录的方式访问资源,效果类似于request.getServletContext().getRealPath(“”);
- UrlResource:访问网络资源的实现类。例如file: http: ftp:等前缀的资源对象;
- ByteArrayResource: 访问字节数组资源的实现类。
- 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来进行的。
- 官方文档中对BeanDefinition的解释如下:
- BeanDifinition在Ioc容器中的注册
- 最终Bean配置会被解析成BeanDefinition并与beanName,Alias一同封装到BeanDefinitionHolder类中, 之后beanFactory.registerBeanDefinition(beanName, bdHolder.getBeanDefinition()),注册到DefaultListableBeanFactory.beanDefinitionMap中。
- beanDefinitionMap是一个concurrentHashMap
DI
- 什么是DI
- Dependence Injection依赖注入(DI是IOC的一种具体实现):解决主键之间的装配问题
- 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路径,扫描对应的包
注解的理解
- 注入方法
- constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。
- byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。–>@Resource(jdk)
- byType:查找所有的set方法,将符合符合参数类型的bean注入。–>@Autowired(Spring)/@Inject
- 注册bean的注解
- @Component:可以用于注册所有bean
- @Repository:主要用于注册dao层的bean
- @Controller:主要用于注册控制层的bean
- @Service:主要用于注册服务层的bean
Spring原理以及流程相关推荐
- MyBatis整合Spring原理分析
目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...
- Spring MVC请求处理流程分析
2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Spring MVC框架在工作中经常用到,配置简单,使用起来也很方便,很多书籍和博客都有介绍其处理流程,但是,对于其 ...
- 统一用户认证和单点登录和授权的原理与流程
统一用户认证和单点登录和授权的原理与流程 1 前言 2 介绍 2.1 统一用户认证 2.2 单点登录 2.3 授权 3 原理 3.1 统一用户认证原理 3.2 单点登录原理 3.3 OAuth授权原理 ...
- spring原理 struts2原理 hibernate原理 MyBatis原理 SpringMVC
Spring原理 最核心的就是IOC,动态注入DI,利用java里的反射,让一个对象的创建不用new了,可以自动的生产.Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调 ...
- Spring原理-IOC控制反转
spring相关文章 Spring原理-IOC控制反转 Spring框架七大核心模块 Spring Beans原理–bean生命周期 一.Spring概述 1. 定义 Spring是一个轻量级Java ...
- Spring原理(二)--循环依赖原理
此篇文章建立在已经了解bean创建原理之上,若不了解,请先阅读本人上一篇文章 Spring原理(一)–IOC原理 1 场景 @Component public class X {@AutowiredY ...
- SSM三大框架+SpringMVC的工作原理及其流程
SSM三大框架+SpringMVC的工作原理及其流程 一.SSM中各层作用及关系 1.持久层:DAO层(mapper层)(属于mybatis模块) DAO层(Mapper层):主要负责与数据库 ...
- Spring原理篇(2)--BeanPostProcessor or BeanDefinition or Aware or InitializingBean
@TOC# Spring系列 记录在程序走的每一步___auth:huf 拨开云雾见天日 守得云开见月明 Spring关健实现 简化版 以下实现均为简化版本;有助于帮助记忆; 该版本代码有部分缺陷 例 ...
- ARKit从入门到精通-ARKit工作原理及流程介绍
2017-06-15 坤小 Cocoa开发者社区 转载请注明出处:http://www.jianshu.com/p/0492c7122d2f 1.1-写在前面的话 1.2-ARKit与SceneKit ...
最新文章
- 论文《城市大脑的定义与建设规范探讨》在IEEE(ICBAIE)发表
- 数据结构和算法学习一,开篇
- java常见类加载器,面试必备
- Linux 备份系统重要服务的配置文件脚本
- go uint64 转 字符_Go的基本数据类型入门看这一篇就差不多了
- php停车场计时收费软件,城市街道停车计时收费系统 路边停车收费软件
- windows mac 安装lua
- mysql 关联查询_mysql数据库调优(二)
- Excel 2003 实用技巧 (FROM MSDN)
- Windows 8轻松用系列
- 物体重心的特点是什么_确定物体重心位置的常用方法是什么呢?
- 管路流体仿真matlab,MathWorks 在 Simscape 中新增建模和仿真流体系统功能
- 编程的宗派(OOP与FP孰优孰劣)--王垠
- JAVA实现Excel文件的导入导出
- 【Red Team——基础】通过钓鱼攻击获得访问权限
- R语言与克朗巴哈alpha系数
- 阿里最全面试116题整理
- 2018年,中国空气质量在全球的排名,你一定想不到!
- Modern source-to-source transformation with Clang and libTooling
- uniapp+egg.js+react实现全栈笔记App