栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring面试题-Spring Beans---更新中

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring面试题-Spring Beans---更新中

目录
  • 什么是Spring bean?JavaBean和SpringBean和对象的区别?
  • 一个 Spring Bean 定义 包含什么?
  • 配置Bean有哪几种方式
  • 16.解释Spring支持的几种bean的作用域
  • 单例Bean的优势是什么?
  • Spring的Bean是线程安全的吗?
  • 19.Spring如何处理线程并发问题?
  • 20.Spring实例化Bean有哪几种方式?
  • 21.什么是Bean装配?什么是Bean的自动装配?
  • 22.自动注入有什么限制吗?
  • 23.自动装配的方式有几种?
  • 24.Bean的生命周期回调方法和执行顺序
  • 25.Spring在加载过程中Bean有哪几种形态
  • 26.解释Spring框架中bean的生命周期
  • 27.Spring是如何解决循环依赖的(难)
  • 28.Spring是如何帮我们在并发下避免获取不完整的Bean?
  • 29.描述BeanDefinition的加载过程
  • 30.如何在所有BeanDefinition注册完后做扩展?
  • 31.如何在Spring所有Bean创建完后做扩展?
  • 32.Spring容器启动时,为什么先加载BeanFactoryPostProcess
  • 33.Bean的生产顺序是由什么决定的?(BeanDefination的注册顺序是由什么决定的?)

什么是Spring bean?JavaBean和SpringBean和对象的区别?

至少记住这句话:构成应用程序主干并由IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。

  • 例子:
一个 Spring Bean 定义 包含什么?

至少记住这句话:一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。

配置Bean有哪几种方式

至少记住这句话:xml、注解、import

1.xml:
2.注解:@Component(@Controller 、@Service、@Repostory) 前提:需要配置扫描包 反射调用构造方法
3.javaConfig: @Bean 可以自己控制实例化过程
4.@import 3种方式

@Bean一般都是标注在方法上,方法返回的是对象。
-例子:
import:


16.解释Spring支持的几种bean的作用域

至少记住这句话:singleton单例,prototype多例,request请求,session会话,application全局web应用

Spring框架支持以下五种bean的作用域:

  • singleton : bean在每个Spring ioc 容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例。
  • request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情
    形下有效。
  • application:全局 Web 应用程序范围的范围标识符。

注意: 缺省的Spring bean 的作用域是Singleton。使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean
会带来很大的性能开销。

五种


默认的作用域是单例

单例Bean的优势是什么?

至少记住这句话:减耗,减垃圾,获取bean更快。

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

只创建一次节省内存,而且获取也快

Spring的Bean是线程安全的吗?


19.Spring如何处理线程并发问题?







20.Spring实例化Bean有哪几种方式?







21.什么是Bean装配?什么是Bean的自动装配?


就是bean和bean之间互相依赖起来

22.自动注入有什么限制吗?


23.自动装配的方式有几种?


24.Bean的生命周期回调方法和执行顺序







注解的先执行了,接口的后执行

25.Spring在加载过程中Bean有哪几种形态


26.解释Spring框架中bean的生命周期




27.Spring是如何解决循环依赖的(难)




ioc加载bean创建时,会实例化,实例化完属性注入,解析注解,发现依赖,然后再去ioc容器找,然后没找到又创建bean又实例化属性注入解析注解,发现又依赖回来,如果又没拿到就去创建。。。。闭环死循环。。。








为啥
才创建动态代理呢?如果实例化之后直接调用创建动态代理,不存函数接口

人家循环依赖B线程在那里创建动态代理是被迫的,如果那时赋的是实例那就有问题了。正常的bean还是在初始化严格遵循bean的生命周期在初始化创建动态代理。

为啥要三级缓存呢?二级缓存行不行呢?
可以啊,直接在这里动态代理,也就是不再存函数接口了这里,


多例bean不会用缓存进行存储


28.Spring是如何帮我们在并发下避免获取不完整的Bean?



初始化有生命周期回调,aop,初始化之前获取到的对象是没有创建动态代理的对象。
实例化之后没有属性注入、没有初始化的Bean都是不完整的


两个线程进来线程一实例化完放进三级缓存,线程二从三级缓存就直接拿走


如何避免呢?



不锁一级是为了已经创建好的直接给线程2拿走啊,别影响了性能,不然创建好的你也锁全都等你没创建的创建啊?

29.描述BeanDefinition的加载过程




先扫描再解析吧???

30.如何在所有BeanDefinition注册完后做扩展?










所以就可以
进行扩展

31.如何在Spring所有Bean创建完后做扩展?









循环所有BeanDefinition创建完Bean之后会调用Smart扩展接口,然后发布refreshevent的事件,ioc加载就是在refresh方法里体现的,说明ioc加载完了,加载完的事件就是这个。

32.Spring容器启动时,为什么先加载BeanFactoryPostProcess



33.Bean的生产顺序是由什么决定的?(BeanDefination的注册顺序是由什么决定的?)





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号