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操作,释放占用的资源。

时间: 2024-08-01 10:46:43

Spring的工作原理核心组件和应用的相关文章

Spring MVC工作原理

Spring MVC工作流程图 图一 图二  Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3.

spring mvc 工作原理

SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Til

关于spring框架工作原理的初解

一:spring基本概念 1)struts2是web框架,hibernate是orm框架 2)spring是容器框架,创建bean,维护bean之间的关系 3)spring可以管理web层,持久层,业务层,dao层,spring可以配置各个层的组件,并且维护各个层的关系 二:spring核心原理 1.IOC控制反转 概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系. 核心:bean工厂 IoC(Inverse of Control)的字面意思是控制反转,它包

Spring @Transactional工作原理

本文将深入研究Spring的事务管理.主要介绍@Transactional在底层是如何工作的.之后的文章将介绍: propagation(事务传播)和isolation(隔离性)等属性的使用 事务使用的陷阱有哪些以及如何避免 JPA和事务管理 很重要的一点是JPA本身并不提供任何类型的声明式事务管理.如果在依赖注入容器之外使用JPA,事务处理必须由开发人员编程实现. 1 2 3 4 5 6 7 8 9 10 11 12 UserTransaction utx = entityManager.ge

Spring的工作原理

一.什么是Spring (1).Spring真正的精华是它的Ioc模式实现的BeanFactory和AOP,它自己在这个基础上延伸的功能有些画蛇添足. (2). Spring它是一个开源的项目,而且目前非常活跃:它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块:它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用I

Spring学习之旅(四)Spring工作原理再探

上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有两个接口:BeanFactory和ApplicationContext.其中ApplicationContext继承于BeanFactory,对企业级应用开发提供了更多的支持.在实际应用中都是用该接口. 1)实例化Spring容器(主要有四种) 1.ClassPathXmlApplicationCo

利用反射模拟一个spring的内部工作原理

这个简单的案例是实行了登录和注册的功能,没有链接数据库. 在bean中id 是唯一的,id和name的区别在于id不能用特殊字符而name可以用特殊字符,比如:/-\.... 1 package com.obtk.reflect; 2 3 public class Logon { 4 /** 5 * 帐号密码长度大于六位字符就成功,否则失败! 6 * */ 7 public String select(String name, String pass) { 8 if (name.length()

Spring aop 原始的工作原理的理解

理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Object Oriented Programming)说起,oop引入封装,多态,继承等概念建立对象层次的结构,处理公共行为属性的集合.对于一个系统而言,需要把分散对象整合到一起的时候,oop就虚了,因为这样的需求已经在对象层次之上了.如订单模块,还款模块都需要User对象配合(当然不止于User对象完成的

Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoConfiguration4. 扩展阅读 3.1. 核心注解 3.2. 注入 Bean 结合<Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机>一文,我们再来深入的理解 Spring Boot 的工作原理. 在<Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏