当前位置: 首页 > news >正文

Spring相关知识集锦----1

一、Spring两大核心是什么?

    Spring两大核心:IOC(控制反转)、AOP(面向切面编程)

    IOC:控制反转,指创建对象控制权的转移;以前创建对象的主动权和时机是由自己把握;现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。

    AOP:面向切面编程,作为面向对象的一种补充;用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用模块。

二、Sring生命周期

1.实例化:实例化一个Bean

2.按照Spring上下文对实例化的Bean进行配置,也就是IOC注入

3.如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName方法,此处传递的是Spring配置文件中Bean的ID

4.如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory方法,此处传递的是Spring工厂本身

5.如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext方法,传入Spring的上下文

6.如果这个Bean关联了BeanPostProcessor接口,会调用postBeforeInitialization方法

7.如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法

8.如果Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization方法

9.当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

10.最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

三、Spring支持Bean的作用域

1)singleton:默认作用域,单例Bean,每个容器中只有一个bean实例

2)prototype:为每一个bean请求创建一个实例

3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收

4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同实例

5)global-session:全局作用域,所有会话共享一个实例。

四、Spring框架中用到的设计模式

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

2.单例模式:Bean默认为单例模式

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

4.模板方法:用来解决代码重复的问题

5.观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象得到通知被动更新

五、SpringBoot产生背景

过去,基于spring构建一个应用,往往都需要开发人员定义样板化的配置,例如:springmvc的配置、mybatis配置等,但这些配置往往与业务逻辑无关,且具有一定通用性。SpringBoot是一个用于构建基于spring框架的独立应用程序的框架,它采用了自动配置原则,以减少开发人员在搭建应用架构方面的时间和精力,同时提升了系统的可维护性和扩展性。

六、Spring如何解决循环依赖问题

spring的循环依赖的理论依据其实是基于java的引用传递,当我们获取到对象的引用时,对象的field或属性是可以延后设置的。spring是靠三级缓存来解决循环依赖问题的。

七、Spring简化配置是如何简化的

springboot通过自动配置,让开发者无需手动配置大量繁琐的配置项。它基于项目的依赖关系,自动配置合适的bean和参数,从而极大简化了spring应用的初始化过程。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • spring-boot集成slf4j(二)logback配置详解
  • 第十一课,end关键字、简单while循环嵌套、初识for循环
  • CAN笔记第二篇,车载测试继续学起来!
  • Python高级进阶--dict字典
  • c++入门的基础知识
  • em,rem,vw,vh,px,rpx,%的用法
  • 什么是跨域?为什么会产生跨域?怎么解决跨域?
  • 【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。
  • Go 实现程序优雅退出
  • 小阿轩yx-Shell 编程规范与变量
  • 集合、Collection接口特点和常用方法
  • 计算机SCI期刊,IF=8+,专业性强,潜力新刊!
  • 基于高通公司AI Hub Models的On-Device AI学习:Introduction to On-Device AI
  • k8s证书过期处理 手动生成证书、凭证
  • Google Find My Device:科技守护,安心无忧
  • 【Linux系统编程】快速查找errno错误码信息
  • 5、React组件事件详解
  • ReactNative开发常用的三方模块
  • SpringBoot 实战 (三) | 配置文件详解
  • tweak 支持第三方库
  • Yii源码解读-服务定位器(Service Locator)
  • 测试如何在敏捷团队中工作?
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 思否第一天
  • 物联网链路协议
  • 小程序开发之路(一)
  • 学习使用ExpressJS 4.0中的新Router
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #QT 笔记一
  • (HAL库版)freeRTOS移植STMF103
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (十三)Flask之特殊装饰器详解
  • (四)汇编语言——简单程序
  • (算法)Travel Information Center
  • (一)基于IDEA的JAVA基础10
  • (转)LINQ之路
  • (转)大道至简,职场上做人做事做管理
  • (转)关于pipe()的详细解析
  • .Net6 Api Swagger配置
  • .NET关于 跳过SSL中遇到的问题
  • .net连接oracle数据库
  • /etc/shadow字段详解
  • @SpringBootApplication 注解
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [C#]C#学习笔记-CIL和动态程序集
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [CSS]CSS 字体属性
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [FUNC]判断窗口在哪一个屏幕上
  • [javaSE] GUI(事件监听机制)
  • [Linux]进程创建➕进程终止