Spring的工作原理核心组件和应用
Spring框架
Spring 是管理多个java类的容器框架,注意是类不管理接口。
Spring 的主要功能 Ioc 反转控制和 DI 依赖注入。
注入的方式可以是构造函数赋值也可以是 set方法赋值推荐用set方法赋值
在Spring一加载的阶段就实例化、和初始化(注入值的话)在Spring配置文件中的多个java类。等待用户的调用,用服务器端的缓存消耗换取客户端的快速响应。
Ioc:反转控制。当实例化一个bean类时,传统的操作方式是由调用者进行实例化。在spring中,不再由调用者进行实例化了,实例化的工作反而是由spring容器进行执行。
DI:是Ioc的进一步的描述。称为依赖注入。是在spring进行bean的实例化操作的同时,由spring负责执行bean类中变量的赋值工作。
Ioc和DI指的都是同一件事:bean的管理完全由spring负责。
Spring set注入的前提:
保留默认无参构造函数
变量私有化
变量存在对应的公有的set方法
bean在spring中的配置
每个bean类,加载到spring中后,都会有自己的配置信息。
<bean id="bean的唯一别名" class="类的物理地址">
<property name="变量名">
<value>具体的值</value>
</property>
</bean>
注入另一个bean
使用ref或idref进行注入
要注入的bean需要事先先在spring进行配置好,注入时,通过id别名进行引用注入
当进行注入操作时,只有赋予明确的唯一值(value)或者赋予另一个bean(ref idref)时,才有命名空间的注入方式。注入一个集合时,只能利用子元素的方式进行注入。
同时,除了子元素的方式实现变量值的注入外,还可以用命名空间的方式进行注入。而且。利用命名空间进行注入时,数据类型不能自己加以改变,全部是默认的String类型
p:变量名="值"
Spring是一种容器框架,在Spring的配置文件applicationContext.xml中配置bean
并且初始化<注入>(可以通过构造函数为变量做初始化赋值,也可以通过set方法的方式为参数赋值)在Spring的配置文件中配置的java类在服务器加载阶段就实例化并且完成初始化工作,等待用户的调用请求。
Spring采用的是单态的工作模式(构造方法私有化,通过公有的静态构造方法返回对象的实例) 重用一个实例化好的java类。
在spring中,配置文件允许在任意位置以任意名称创建任意数量的xml文件。
默认的,在src目录,存在applicationContext.xml作为主配置文件。
pplicationContext的实例化
由两种实例化的方式,通过两个类来实现。
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
每一个java类,放置到spring中进行统一管理时,都由唯一的一个<bean>标签进行对应。
Spring默认的工作模式有两种:单态模式和工厂模式
工厂模式:<多态>
统一接口管理多个java类
工程模式简单说:用户传入什么,返回什么类型的对象。
当多个对象具有相同或相似的行为时,先把这些相似的行为抽象出来,形成一个公共的接口,这些对象都实现自此接口,形成统一的父类管理。
同时,创建一个工厂对象。当调用具体对象时,不再通过具体对象的实例化完成,而是统一由工厂类实现对象的实例化。
这样,将不同对象无论是父类还是实例化,全部实现了统一管理。
当spring启动时,首先会加载并实例化完成所有在spring中配置好的bean。同时,会自动完成所有注入好值的变量的赋值操作,以准备好被客户的调用。这样,用户要通过spring调用bean时,就只是进行调用,而没有了实例化的过程。
★注意点★!: 一个bean类,当没有通过spring实现变量值的注入时,既可以采用传统的new的方式进行实例化,也可以通过spring进行实例化。但一旦有变量通过spring进行注入值了,就只能通过spring进行调用了。(原因:没有注入时 new实例化和通过spring上下文获得的都是默认无参的构造函数实例化好的对象,如果Spring配置文件中通过(子元素或者命名空间)注入值了再new实例化还是默认无参构造函数,而Spring的上下文获得的java类则是注入参数的实例化两个调用结果不同)。
Spring 中配置的bean可以是实际存在的java类也可以是没有类体的bean。
在spring中,一个bean存在四个高级属性
(1)scope属性
spring生成bean的方式和bean的作用域
A:default
默认,就是单态
B:singleton
单态的。以单态的思想来实例化一个bean,实现所有对当前bean的调用都重用同一个对象,共享同一个地址。
评价:
优点:实现对象的重用
缺点:可能会产生数据冲突
C:prototype
每个用户请求都生成一个新的bean的实例
优点:避免数据数据,解决单态的弊端
弊端:产生的bean类太多。
解决方法:现在bean的管理不再由调用者,而完全由spring负责。
D:request
在用户发送的一次请求范围内,共用同一个bean。
E:session
在一个用户会话的范围内,公用同一个bean
F:globalSession
代表整个应用程序范围内都公用同一个bean
推荐:default或prototype
针对于模型层、业务层使用singleton。针对控制层,使用prototype。
(2)lazy init
延迟加载
A:基本思想
在spring中,默认的是,所有在spring中进行配置的bean,在spring启动时,全部自动进行实例化和注入操作。
延迟加载:指是否在spring启动时,实例化和注入bean。
B:false
default
默认的,不延迟加载。spring已启动,马上进行实例化
实质:以服务器启动速度的降低,换取用户调用性能的提高。
会产生:服务器缓存占用的加大。
C:true
延迟加载
不会在spring启动时实例化和注入操作。只有等待用户调用时,才进行实例化。
(3)autowire
自动装载
当一个属性需要注入的值是另一个bean时,是否可以不用进行xml配置注入,而能够自动实现。
A:no
default
必须通过xml配置实现注入
B:byName
根据变量名自动在spring找寻相匹配的bean进行注入
C:byType
根据变量的数据类型,自动找寻相匹配的bean进行注入
D:constructor
根据bean的构造函数中指定的参数进行注入
E:autodetect
自动执行前面的三种自动注入的方式
由于,在Bean中,变量名或数据类型可能都不能准确的代表要注入的bean的信息。而且,在一个类中,可能存在多个数据类型是一个bean的变量,这样,挨个去进行自动匹配,太耗费资源。推荐还是明确的通过xml进行精准的注入。
(4)检查依赖
验证bean中是否所有的变量都具有set方法,而且都在spring中进行注入操作。
在实际中,并不是所有的变量都需要进行注入赋值的。
A:none
default
不检查
完全根据用户自己的需要进行set方法的设置和注入操作。
B:simple
只对基本数据类型和集合类型变量进行检查。
C:objects
只对对象类型(需要引用另一个bean)的变量进行检查
D:all
全部变量都进行检查
(5)生命周期
在spring中,bean的管理完全由spring进行操作。同事,可以在bean中加入自己的初始化和资源释放的操作。更进一步的生命周期的管理。
初始化:不是变量的初始化赋值,而是锁需要获得资源的初始化获取,例如,数据库信息的获得。
当spring启动时,默认的会实例化bean、执行注入、执行初始化操作。
只有,当容器停止服务活服务器关闭时,才会自动调用destroy操作,释放占用的资源。
Spring的工作原理核心组件和应用的更多相关文章
- Spring MVC工作原理(好用版)
Spring MVC工作原理 参考: SpringMVC工作原理 - 平凡希 - 博客园https://www.cnblogs.com/xiaoxi/p/6164383.html SpringMVC的 ...
- Spring Session工作原理
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/KCOFv0nRuymkX79-RZi9eg 作者:张正林 目录:1.引入背景2.使用方法3.工作流程 ...
- Struts1、Struts2、Hibernate、Spring框架工作原理介绍
Struts1工作原理 Struts1工作原理图 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控 ...
- Spring MVC工作原理及源码解析(三) HandlerMapping和HandlerAdapter实现原理及源码解析
1.HandlerMapping实现原理及源码解析 在前面讲解Spring MVC工作流程的时候我们说过,前端控制器收到请求后会调⽤处理器映射器(HandlerMapping),处理器映射器根据请求U ...
- Spring MVC工作原理及源码解析(一) MVC原理介绍、与IOC容器整合原理
MVC原理介绍 Spring MVC原理图 上图是Spring MVC工作原理图(图片来自网上搜索),根据上图,我们可以得知Spring MVC的工作流程如下: 1.用户(客户端,即浏览器)发送请求至 ...
- 深入理解Spring IOC工作原理
为什么会出现spring,spring出现解决了什么问题? 1.分析普通多层架构存在的问题 JSP->Servlet->Service->Dao 层与层之间的依赖很强,属于耦合而且是 ...
- Spring MVC工作原理 及注解说明
SpringMVC框架介绍 1) spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功 ...
- 简述spring的工作原理
建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候看完.如果想学学ioc,控制反转这些建议看看jodd项目,比较简练,但是我仍然不建议过多的看这些框架的代码,因 ...
- Java:Spring @Transactional工作原理
本文将深入研究Spring的事务管理.主要介绍@Transactional在底层是如何工作的.之后的文章将介绍: propagation(事务传播)和isolation(隔离性)等属性的使用 事务使用 ...
随机推荐
- Linux 下文件监控
本文转自http://www.jiangmiao.org/blog/2179.html 在日常应用中,常常会遇到以下场景,监控文件夹A,若文件夹中的B文件发生变化,则执行C命令.Linux下可以通过i ...
- 【Spring MVC系列】--(5)理解AOP
1.java反射 实用:JAVA反射机制及应用例子 http://407827531.iteye.com/blog/1173930 系统:java反射原理 http://china-jianchen. ...
- 常用的JS数据类型转换方法
JS 数据类型转换的方法有以下3种:1)使用转换函数2)强制类型转换3)利用js变量弱类型特性进行转换 1:js提供了parseInt()和parseFloat()这两个转换函数. 这里输入内容par ...
- JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath
今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序 ...
- 关于JS历史拓展
js由来 95年那时,绝大多数因特网用户都使用速度仅为28.8kbit/s 的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加.为完成简单的表单验证而频繁地与服务器交换数据只 ...
- .NET程序集签名
强命名程序集的一个好处是防篡改.假如我有一个程序集MyDll.dll,如果我用我自己的私钥进行签名将程序集中的内容进行哈希处理,其他人如果不知道我的私钥的话,就不能篡改我的这个程序集进行某些恶意的行为 ...
- (转)检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...
- Android --------- 压缩图片的尺寸和大小
压缩图片大小,尺寸不变 将已知路径的图片压缩至不大于目标大小,并保存至指定路径 /** * 质量压缩,通过给定的路径来压缩图片并保存到指定路径 * * @param srcPath * 资源图片的路径 ...
- iOS_SN_UITableView的优化
1.提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法. 2.异步绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口. 3.滑动时按需加载,这个在大量 ...
- C#模拟登录的htmlHelper类
public class HTMLHelper { /// <summary> /// 获取CooKie /// /// </summary> /// /// <para ...