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

SpringBean面试题

Spring是什么?AOP、IOC的解释?

IOC:控制反转或反转控制(Inverse of Control),也可以称之为依赖倒置。主要作用于对象的创建和管理;IOC主要是解决对象之间的耦合问题

AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程,AOP是OOP的延续。
就Spring的角度看,AOP最大的作用就是在于提供事务管理的能力。在不改变原有的业务逻辑情况下,增强横切逻辑代码,解耦并避免横切逻辑代码的重复。

Spring容器的创建过程

1)、Spring容器在启动的时候,先会保存所有注册进来的Bean的定义信息;
1)、xml注册bean;
2)、注解注册Bean;@Service、@Component、@Bean、xxx
2)、Spring容器会合适的时机创建这些Bean
1)、用到这个bean的时候;利用getBean创建bean;创建好以后保存在容器中;
2)、统一创建剩下所有的bean的时候;finishBeanFactoryInitialization();
3)、后置处理器;BeanPostProcessor
1)、每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能;
AutowiredAnnotationBeanPostProcessor:处理自动注入
AnnotationAwareAspectJAutoProxyCreator:来做AOP功能;
xxx…
增强的功能注解:
AsyncAnnotationBeanPostProcessor

4)、事件驱动模型;
ApplicationListener;事件监听;
ApplicationEventMulticaster;事件派发:

配置bean有哪几种方式?

1.xml: <bean class=“com.tuling.UserService” id=>
2.注解: @Component(@Controller 、@Service、 @Repostory)反射调用构造方法//需要配置扫描包 context:annotation-config/
3.javaConfig: @Bean @Configuration可以自己控制实例化过程
4.@lmport

实例化bean有哪几种方式?

1.构造器方式(反射)–xml,@Component
2.静态工厂
3.实例工厂(@bean)
4.bean工厂

Spring支持的几种bean的作用域?

  1. singleton : bean在每个Spring ioc容器中只有一个实例。
  2. prototype: 一个bean的定义可以有多个实例
  3. request: 每次http请求都会创建一个bean, 该作用域仅在基于web的Spring ApplicationContext情形下有效。
  4. session:在一个HTTP Session中,一个bean定义对应一 个实例。 该作用域仅在基于web的Spring ApplicationContext情形下有效。
  5. global-session: 在-一个全局的HTTP Session中, - -个bean定义对应-个实例。 该作用域仅在基于web的Spring ApplicationContext情形下有效。

单例bean的优势?

由于不会每次都新创建新对象所以有一下几个性能上的优势:

  1. 减少了新生成实例的消耗新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。
  2. 减少jvm垃圾回收由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。
  3. 可以快速获取到bean因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快。

单例bean是线程安全的吗?

单例bean情况如果在类中声明成员变量,并且有读写操作(有状态)线程不安全但是只要把成员变量声明到方法中(无状态)单例bean就是安全的

如何处理线程并发问题?

  1. 设置为多例的
  2. 将成员变量放在threadlocal中
  3. 同步锁syn(变成串行了会影响吞吐量)

Spring是如何实现单例bean的?

Spring是通过单例注册表实现单例的,Ioc容器维护了一个bean表格,当需要一个单例bean时,从表格中获取,没有获取到的,向表格注册一个新的bean。

不同方式的自动装配 ?

  1. no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。
  2. byName :通过参数名自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
  3. byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。
  4. constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
  5. autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

bean的四种形态?

在这里插入图片描述

概念态–刚在标签里定义还没有加载在new Applicationtext之后进入IOC的创建 进入定义态
定义态–把id,lazy,scop等定义信息传到BeanDefinition当中再通过BeanFactory把定义态创建成纯净态
纯净态–完成创建但是没有注入属性信息(他是存在二级缓存中用来解决循环依赖)
成熟态–属性注入完成

Spring Bean 的生命周期?

  1. 通过构造器创建bean实例(无参数构造)
  2. 为bean的属性设置值和对其他bean引用(调用set方法)
  3. 把bean实例传递给bean后置处理器的方法postProcessBeforeInitialization
  4. 调用bean的初始化方法(需要进行配置初始化的方法)
  5. 把bean实例传递给bean后置处理器的方法postProcessAfterInitialization
  6. bean可以使用了(对象获取到了)
  7. 当容器关闭时,调用bean的销毁的方法(需要进行配置销毁的方法)

相关文章:

  • Linux installation of Davinci Adaptive IDE
  • 基于SSM的住院病人监测预警信息管理系统毕业设计源码021054
  • 字节一面:说说TCP的三次握手
  • 数据中台不是万能钥匙,企业需求才是数据中台建设的根本
  • Hadoop 集群时间同步设置
  • yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • Android——Activity和Fragment的通信方式
  • 【校招VIP】前端项目开发之正则表达
  • Vite创建Vue2项目中,封装svg-icon组件并使用——插件之vite-plugin-svg-icons和fast-glob
  • 洛谷题单 Part2.1 模拟
  • Selenium 中的 JUnit 注解
  • ES6中的set、map
  • 基python的毕业设计题目超市进存销系统
  • 云计算基础
  • C语言文件基本操作
  • [case10]使用RSQL实现端到端的动态查询
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 230. Kth Smallest Element in a BST
  • ES6 学习笔记(一)let,const和解构赋值
  • express如何解决request entity too large问题
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript 基本功--面试宝典
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript创建对象的四种方式
  • JavaScript的使用你知道几种?(上)
  • leetcode46 Permutation 排列组合
  • PHP变量
  • React-redux的原理以及使用
  • SOFAMosn配置模型
  • TCP拥塞控制
  • web标准化(下)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 汉诺塔算法
  • 前端之Sass/Scss实战笔记
  • 入门到放弃node系列之Hello Word篇
  • 思考 CSS 架构
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 译有关态射的一切
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • #Z0458. 树的中心2
  • (1)STL算法之遍历容器
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (区间dp) (经典例题) 石子合并
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)关于pipe()的详细解析
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET4.0并行计算技术基础(1)
  • .NET6 开发一个检查某些状态持续多长时间的类