Spring是什么?

Spring是一个轻量级的IoC和AOP容器框架。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。

模块分为以下:Spring Core;Spring Context;Spring AOP;Spring DAO;Spring ORM;Spring Web;Spring MVC。

1.Spring MVC的工作流程(spring工作机制)?
(1)发起请求到前端控制器disPatchServelet。
(2)disPatchServelet调用handlerMapping寻找对应的hander,handlerMapping返回给hander给前端控制器。
(3)disPatchServelet通过HandlerAdapter去调用controller到服务层,返回modelAndView给前端控制器。
(4)disPatchServelet再调用视图解析器解析modelAndView,返回一个view给前端控制器。
(5)disPatchServelet再渲染之后返回给用户。

1、Spring Bean实例作用域:

① singleton:   IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

② prototype:   IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

③ request:  该属性仅对HTTP请求产生作用,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

④ session:  该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

⑤ global-session:该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

1、Spring容器可以管理singleton作用域下Bean的生命周期,在此作用域下,Spring能够精确地知道Bean何时被创建,何时初始化完成,以及何时被销毁。

2、对于prototype作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给了客户端的代码管理,Spring容器将不再跟踪其生命周期,并且不会管理那些被配置成prototype作用域的Bean的生命周期。

BeanFactoryFactoryBean是什么

BeanFactory: 是Spring容器中的一个基本类,负责生产和管理bean。

FactoryBean: 是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程。

事实上, Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的ApplicationContext。

BeanFactory与ApplicationContext的作用和区别?

1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能。

3、ApplicationContext的初始化和BeanFactory有一个重大的区别:

    BeanFactory在初始化容器时 并未实例化Bean, 直到第一次访问 某个Bean时才实例目标Bean;
 而ApplicationContext则在 初始化应用上下文 时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些。

BeanFactory怎么创建并且给使用者一个bean?
(1)我们定义一个Bean类,这个由BeanFactory工厂来生成。这个类用来存放一个Bean拥有的属性,这个Bean对象包含id,type,和properties三个属性。
(2)然后Spring 就开始加载我们的配置文件了,将我们配置的信息保存在一个HashMap中,HashMap的key就是Bean 的 Id ,HasMap 的value是这个Bean,只有这样 我们才能通过context.getBean("animal")这个方法获得Animal这个类。
(3)现在已经有spring工厂,需要通过反射机制把对应的bean注入进去。通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。
(4)最后它将这个类的实例返回给我们,我们就可以用了。

请解释Spring Bean的生命周期?
(1)实例化Bean:
(2)设置对象属性(依赖注入):
(3)处理Aware接口:将相关的xxxAware实例注入给Bean
(4)让Bean实现了BeanPostProcessor接口。
(5)InitializingBean 与 init-method:   自动调用其配置的初始化方法。
(7)DisposableBean:   调用其实现的destroy()方法
(8)destroy-method:销毁
Spring如何处理线程并发问题?
  在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。
 
Spring 框架中都用到了哪些设计模式?

(1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

(2)单例模式:Bean默认为单例模式。

(3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;

(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener。

Spring如何解决循环依赖的三种方式?

循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。

第一种:构造器参数循环依赖:

表示通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛出BeanCurrentlyIn CreationException异常表示循环依赖。

第二种:setter方式单例,默认方式:

1、Spring是先将Bean对象实例化之后再设置对象属性的。

2、Spring在InstantiateBean时执行构造器方法,构造出实例,如果是单例的话,会将它放入一个singletonBeanFactory的缓存中,再进行设置属性。通过一个singletonBeanFactory的缓存解决了循环依赖的问题。

第三种:setter方式原型,作用域设置为prototype:

对于"prototype"作用域bean,Spring容器无法完成依赖注入,因为Spring容器不进行缓存"prototype"作用域的bean,因此无法提前暴露一个创建中的bean。

 
 
 
 

Spring相关原理的更多相关文章

  1. spring MVC原理

    spring MVC原理   Spring MVC工作流程图   图一   图二    Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt D ...

  2. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  3. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  4. Spring 注解原理(一)组件注册

    Spring 注解原理(一)组件注册 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 当我们需要使用 Spring 提供的 ...

  5. Spring工作原理与单例

    最近看到spring管理的bean为单例的,当它与web容器整合的时候始终搞不太清除,就网上搜索写资料, Tomcat与多线程, servlet是多线程执行的,多线程是容器提供的能力. servlet ...

  6. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  7. Spring注解原理

    一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析注解 ...

  8. Spring事物原理完全解析

    事务是什么?了解事务的原理吗?说下Spring的事务原理,能自己实现Spring事务原理吗?先自我检测下这些知识掌握了吗.那么接下来一起看下与Spring相关的事务 概念 事务具有ACID特性. 是指 ...

  9. spring security 原理+实战

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...

  10. Spring事务原理分析--手写Spring事务

    一.基本概念和原理 1.Spring事务 基于AOP环绕通知和异常通知的 2.Spring事务分为编程式事务.声明事务.编程事务包括注解方式和扫包方式(xml) Spring事务底层使用编程事务(自己 ...

随机推荐

  1. 深度解剖Linux权限的概念

    Linux 权限系统是其安全性的基石,它允许系统管理员和用户对文件和目录进行精细的控制.在深度解剖 Linux 权限的概念时,我们需要涵盖以下主题: 1. **文件系统基础** - 文件系统结构:Li ...

  2. java如何导入导出excel

    在Java中,可以使用多种方式导入和导出Excel文件.下面将详细介绍几种常见的方法及其实现步骤: 1. Apache POI库: Apache POI是一个开源的Java库,提供了许多类和方法用于处 ...

  3. 创建一个循环写入数据有事务提交的oracle函数示例

    /*创建函数*/create or replace function fnc_testtempInfo(startDate IN varchar2, endDate in varchar2) retu ...

  4. [ABC267F] Exactly K Steps

    Problem Statement You are given a tree with $N$ vertices. The vertices are numbered $1, \dots, N$, a ...

  5. 推荐给前端开发的 5 款 Chrome 扩展 🚀

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 工欲善其事,必先利其器.Chrome 可能是前端开发中使用最多的浏览器.在日常开发中,下列几款 Ch ...

  6. 用Python写一个简单的TCP客户端和服务端

    在渗透测试过程中,经常需要创建一个TCP客户端,用来测试服务.发送数据.进行 fuzz 等等.如果黑客潜伏在某大型企业的内网环境中,则不太可能直接获取网络工具或编译器,有时甚至连复制/粘贴或者连接外网 ...

  7. 什么是Helm?它是如何提升云原生应用私有化部署效率的

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 试想一下,如果有一个项目有50 个微服务,每个微服务都有service.deployment.ingress.pvc等 ya ...

  8. 聊聊ChatGLM中P-tuning v2的应用

    论文PDF地址:https://arxiv.org/pdf/2110.07602.pdf 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ P-Tunin ...

  9. vue常用函数

     this.$router.back();  //回退上一页面

  10. 【玩转鲲鹏DevKit系列】何如快速迁移有源码应用

    本文分享自华为云社区<[玩转鲲鹏DevKit系列]何如快速迁移有源码应用>,作者:华为云社区精选 . 源码(也称源程序)是程序员编写的计算机程序的文本形式,不同的编程语言有不同的语法和规则 ...