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

Spring全家桶面试题

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

Spring全家桶面试题

目录
  • 1.什么是Spring
  • 3.Spring的优缺点是什么
  • 4.什么是Spring IOC容器?有什么作用?优点是什么?
  • 5.Spring IoC的实现机制是什么
  • 6.IoC和DI的区别是什么
  • 7.紧耦合和松耦合有什么区别?如何编写松耦合代码?
  • 8.BeanFactory的作用
  • 9.BeanDefinition的作用
  • 10.BeanFactory和ApplicationContext有啥区别?
  • 11.BeanFactory和FactoryBean有什么区别?
  • 12.说下Spring IOC容器的加载过程
  • 13.Spring IoC有哪些扩展点,在什么时候调用?
  • 14.什么是Spring bean?JavaBean和SpringBean和对象的区别?
  • 15.配置Bean有哪几种方式
  • 16.解释Spring支持的几种bean的作用域
  • 17.单例Bean的优势是什么?
  • 18.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的注册顺序是由什么决定的?)
  • 34.Spring有哪几种配置方式
  • 35.JavaConfig是如何替代spring.xml的?
  • 36.@Component啊啥的注解啥区别
  • 37.@import可以有几种用法?
  • 38.如何让自动注入没有找到依赖Bean时不报错
  • 39.如何让自动注入找到多个依赖Bean时不报错
  • 40.@Autowired注解有什么用
  • 41.@Autowired和@Resource之间的区别
  • 42.@Autowired注解自动装配过程是怎样的?
  • 43.@Configuration的作用及解析原理
  • 44.@Bean的方法调用是怎么保证单例的?
  • 45.要将一个第三方的类配置成Bean有哪些方式?
  • 46.为什么@ComponentScan不设置basePackage也会扫描?
  • 47.什么是AOP?能做什么?
  • 48.解释一下Spring AOP中常见的概念名词
  • 49.Spring通知有哪些类型?
  • 50.Spring Aop和AspectJ Aop有什么区别?
  • 51.JDK动态代理和CGLIB动态代理的区别

1.什么是Spring


3.Spring的优缺点是什么









4.什么是Spring IOC容器?有什么作用?优点是什么?



5.Spring IoC的实现机制是什么


简单工厂+反射(BeanFactory、创建对象)



6.IoC和DI的区别是什么




7.紧耦合和松耦合有什么区别?如何编写松耦合代码?





8.BeanFactory的作用




9.BeanDefinition的作用





工厂模式加反射机制

10.BeanFactory和ApplicationContext有啥区别?





11.BeanFactory和FactoryBean有什么区别?






拿到原本实例

12.说下Spring IOC容器的加载过程





概念态到注册态,通过此Bean工场的后置处理器方法对外扩展,对内解耦。

注册完,生产

单例不是懒加载不是抽象才会在ioc加载为你生产



找到就返回,没有就创建

创建呢,首先实例化(反射)

实例化完就到纯净态

然后属性赋值
DI的体现

然后初始化

创建Aop,调其他扩展接口

Bean创建完后就放到Map当中



IOC加载过程从创建一个容器开始,记住四个点:
概念态:配置的Bean,还没有真正的加载
定义态

会解析配置类

根据配置是扫描包,拿到所有.class,看看上面有没有注解。如果有就会

这就是概念态到定义态

ioc给的拓展

还有监听器啊啥的

下一个就是纯净态(已经实例化完成),还没有进行依赖注入
从定义态到纯净态就是BeanFactory负责生产了,开始生成前判断是否符合标准,判断是不是单例是不是抽象是不是懒加载,如果不是懒加载,不是抽象,是单例,才会在ioc加载时立马生产。
生产过程会去容器看有没有已经创建好,有就返回,没有才创建。
生产过程:1、实例化(反射),得到纯净态的Bean,然后解析DI,注入属性,调回调、Aware接口等对外扩展接口,这俩都是在初始化的时候做的

别忘了初始化时也会创建Aop,当然是需要实现Aop才会去创建Aop动态代理

最后创建完成,放到Map中





13.Spring IoC有哪些扩展点,在什么时候调用?






refresh方法体现了整个IoC的加载过程

这个方法中注册DeFination

两个扩展接口的方法

没配置就想实现注册用这个

玩一下






BeanDefination就是Bean之前的一个形态

工厂后置处理器

咋玩呢?

其实上一个和这个是子父关系

重写这个方法的原因就是这个

负责Bean生产过程中一切
可以做很多事情

可以拿到定义类去修改

注册单例

销毁Bean

注册的先调用啊

生产过程中的扩展接口



初始化也有一堆扩展接口哈


玩一下



不同的Aware提供的东西也不同

提供名字

提供BeanFactory

刚才的那个扩展接口是在注册并定义的时候调用的

Aware是初始化的时候,调用时机不一样

生命周期回调又怎么玩呢?
每一个都有三种:
初始化
通过注解初始化阶段自动调用





销毁也是三种



总结

第一种




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



15.配置Bean有哪几种方式



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


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



五种


默认的作用域是单例

17.单例Bean的优势是什么?


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

18.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的注册顺序是由什么决定的?)





34.Spring有哪几种配置方式


35.JavaConfig是如何替代spring.xml的?









36.@Component啊啥的注解啥区别


@Component是后面仨的元注解
控制层,业务逻辑层,数据访问层

主要是提高代码阅读性

37.@import可以有几种用法?











这个是更靠后的BeanDifination的注册顺序啊


只要不是Bean定义的注册器的后置处理器,它的顺序都是最后,倒二的哈

38.如何让自动注入没有找到依赖Bean时不报错



39.如何让自动注入找到多个依赖Bean时不报错


40.@Autowired注解有什么用


41.@Autowired和@Resource之间的区别


42.@Autowired注解自动装配过程是怎样的?






43.@Configuration的作用及解析原理


作用:

原理:


44.@Bean的方法调用是怎么保证单例的?


45.要将一个第三方的类配置成Bean有哪些方式?


import干预不了实例化的过程的,因为直接拿类放射了



都是操控BeanDefinition,只不过他的顺序是最后的

46.为什么@ComponentScan不设置basePackage也会扫描?


47.什么是AOP?能做什么?


48.解释一下Spring AOP中常见的概念名词




49.Spring通知有哪些类型?




调的目的是和环绕通知一致

50.Spring Aop和AspectJ Aop有什么区别?






前置、环绕、后置通知


编译时帮修改好了.class文件

因为你要单独编译,增加了开发成本,所以spring就用jdk实现aop,spring aop虽用到了AspectJ,但
底层没用动态织入修改字节码文件,因为它要单独编译器。

51.JDK动态代理和CGLIB动态代理的区别



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

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

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