Java面试之spring相关

2023-05-16

1. 什么是spring,简单介绍一下spring

spring是一个轻量级javaee框架,由RodJonson开发,旨在解决开发时业务层逻辑层等层间的耦合问题
其标志特性有DI依赖注入和AOP切面编程

2. spring的关键策略

通过pojo实现的低侵入性编程
通过DI和面向接口实现的松耦合
通过切面和惯例实现的声明式编程
通过切面和模板实现的低冗余代码

3. Spring框架的设计目标,设计理念,和核心是什么

设计目标是为开发人员提供一个一站式轻量级开发平台
设计理念是利用javabean和pojo实现基于接口的低侵入编程,ioc实现的松耦合
核心是ioc和aop,ioc实现低耦合度,aop可以将各层的功能提取出来组件化,便于使用

4. Spring的优缺点是什么?

优点:spring管理了所有内容,解耦方便开发;aop便于监控运行,日志管理;spring便于使用javaee的一些api,同时支持其他的一些框架;spring支持juit4,一键注解,便于测试
缺点:反射影响性能,作为轻量级框架但内容却比较复杂,入门需要较长时间

5. Spring有哪些应用场景

企业开发,ssh,ssm等等

6. Spring由哪些模块组成?

Spring core ,spring核心部分,包括依赖注入di和控制反转ioc
spring beans,spring将管理对象的方法称为beans
spring context,用以框架式调用对象
spring jdbc,用以方便连接数据库的部分,将一些主流数据库的连接和排错代码封装在内
spirng test,用以测试spring的一些功能
spring web,用以进行文件上传和网络通信的一些共
spring aop,切面编程,日志,监控,可以自定义拦截点,切点

7. Spring 框架中都用到了哪些设计模式

工厂,应用:beanfactory用来创建对象
单例:singleton应用:spring的bean
模板 避免编写重复代码;应用:restemplate,
代理:spring的aop应用了jdk的动态代理
观察者 : 定义对象间的依赖关系,改一个其他也会边,applicationContext

8. 详细讲解一下核心容器(spring context应用上下文) 模块

beanfactory就是spring以及相关框架的核心模块,使得spring实现ioc,依赖可以脱离应用代码,实际应用有xmlbeanfactory,根据xml来配置相关的bean,实现对应用程序的控制和配置

9. Spring框架中有哪些不同类型的事件

五种事件,上下文更新,开始,停止,关闭事件和请求处理事件
前三种分别是Confiuger调用refresh,start,stop方法,停止是关闭springApplicationContext时的事件,请求处理是web发出请求结束,如果一个bean实现了listener接口,那么当event发生时,就会通知bean处理

10. Spring 应用程序有哪些不同组件?

接口:提供方法功能
应用程序:调用接口
springaop:提供面向切面编程的功能
bean类:提供属性,gettersetter方法,函数等
bean配置文件:包含bean的一些信息,对bean进行配置

11. 使用 Spring 有哪些方式?

单独使用spring开发应用程序,
使用frame中间层,
使用Spring包装POJO,
用作远程调用
以上四种方式

12. 什么是Spring IOC 容器?

IOC,inversion of control ,把对对象的控制权从程序代码转交给了外部容器,由spring来创建,初始化,调用对象,来管理其生命周期

13. 控制反转(IoC)有什么作用

解耦,由spring容器解耦各个组件
简化对象的管理和依赖关系的处理
简化对类的产生的管理,例如代理

14. IOC的优点是什么?

通过spring容器的控制,实现了低耦合
由于各种模板和切面,降低了代码量,节约编写时间
支持简易的测试,不需单例和查询api目录
支持饿汉式初始化与懒加载

15. Spring IoC 的实现机制

利用工厂模式加反射
简单例子:工厂类获取类名,getinstance,或者class.forName获取类名创建类对象
在spring中体现就是容器来根据配置寻找对象并注入

16.Spring 的 IoC支持哪些功能

依赖的注入和检查
集合类型的注入
回调(需实现spring的接口,有损低侵入性)

17. BeanFactory 和 ApplicationContext有什么区别

两者都是spring的核心组件,beanfactory可以对bean进行管理,AC则是对程序运行时

18. BeanFactory 和 ApplicationContext有什么区别

首先ApplicationContext是BeanFactory的接口,提供了更多框架功能
加载方式不同:BeanFactory是编程式,需要bean时才加载(懒加载),applicationContext是一次性加载所有bean,这样可以检查错误,也方便后续使用,但耗费内存,也比较慢,可以手动设置bean懒加载,加入lazy-init="true"即可
创建方式上,两者都可以实现一些共同的方法,但前者是编程式,手动的,后者是自动的

19.ApplicationContext通常的实现是什么?

filesystem,classpath,web三种xmlApplicatonContext
分别是从一个路径里的文件里记载,从一个classpath里加载bean配置,和从一个文件里加载web应用所需的bean配置
ApplicationContext接口中常用方法?
在这里插入图片描述

20. 什么是Spring的依赖注入

ioc的两种实现,依赖注入和依赖查找,依赖注入就是容器把有依赖关系的对象在运行时动态地注入到相关联的组件中,组件也不做查找,而是让容器根据方法提供依赖关系

21. 依赖注入的基本原则

依赖关系应该由容器运行时动态决定,不由组件自己查找

22. 依赖注入有什么优势

大量解耦,对象不依赖容器,不依赖api,不依赖接口,定位操作不依赖代码
新对象不必new,只需在配置文件里配置一下就可以用

23. 有哪些不同类型的依赖注入实现方式?

构造函数,setter方法(属性注入),接口注入

24. 什么是Spring beans

spring中那些java对象,由容器管理装配,常见得有在xml文件内定义

25. 一个 Spring Bean 定义 包含什么?

配置数据,依赖以及生命周期详情)(1、实例化(Instantiation) 2、属性设置(populate) 3、初始化(Initialization) 4、销毁(Destruction)”)

26. 如何给Spring 容器提供配置元数据?Spring有几种配置方式

基于xml文件,基于注解,基于java

27. Spring基于xml注入bean的几种方式

构造器注入,setter注入,实例工厂,静态工厂

28. 怎样定义类的作用域?

bean属性里有scope,当每次都返回同一个实例就用singleton,有多个不同的就prototype

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

sinleton:每次返回同一个实例
prototype:可以有多个实例
request:每次http请求返回一个实例,与下面两种都只在支持web的ac下有效,request是每次http请求
session:每次会话一个实例
global session:每次全局会话一个实例
application:生命周期同步于 ServletContext
websocket:只作用于一次 websocket 通信,若连接被释放,则 bean 自然也会被销毁。

30. Spring框架中的单例bean是线程安全的吗?

不安全,安全需要用prototype或者自己写保证安全的方法

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

通过ThreadLocal,实现原理是空间换时间,就是创建变量副本,不同线程操作不同的副本,这样就是耗费更多空间,但避免上锁机制的排队慢问题

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

实例化:首先对bean实例化
属性赋值:然后将值和引用注入bean属性中
初始化:然后检查6个接口是否被实现(BeanNameAware,BeanFactoryAware,ApplicationContextAware,BeanPostProcessor,InitializingBean,BeanPostProcessor)如果有就调用其中对应方法
销毁:接着bean驻留在上下文中直至上下文被销毁
检查是否实现了DisposableBean接口,有就调用destory方法
在这里插入图片描述

33. 哪些是重要的bean生命周期方法? 你能重载它们吗?

setup和teardown,分别是加载类和卸载bean时使用,可以在bean中用标签自定义

34. 什么是Spring的内部bean?什么是Spring inner beans?

内部bean就是只作为别的bean的属性

35. 什么是AOP

切面编程,将那些重用度高的代码切为一个切面(Aspect),或者说模板,以解耦和提高维护性

36. Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?

动态aop与静态aop,动态就是在运行时生成aop对象,静态就是在编译时修改字节码,生成aop代理类,运行时生成aop对象

37. 解释一下Spring AOP里面的几个名词

切面:通知和切点的集合,切面类实现可以模板类或者普通类加注解
连接点:时机,用来插入切面的一个时间点
通知:advice,切面的工作称为通知
切入点:匹配连接点,匹配对应的类
引入:对类添加属性和方法
目标对象:切面通知的对象
织入:将切面给目标对象,创建代理对象的过程

38. Spring通知有哪些类型?

前置,后置,环绕,返回,异常
执行顺序:环绕前,前置,方法执行,环绕后,后置,返回(或异常)

39. 什么是切面 Aspect

使用Aspect注解的类就是切面类,它包括了切入点(连接点的定义)和通知(横切面逻辑),Springaop主要就是通过切入点和通知找到连接点,并且处理通知里的代码
在这里插入图片描述
在这里插入图片描述

40.spring如何解决循环依赖?

(1)spring bean发生循环依赖有三种形式:
a和b相互依赖形成循环依赖
三者之间及其以上的依赖
自我依赖
(2)产生循环依赖原因是:
A创建时— —>需要B— —>去创建B— —>需要A,于是产生了循环
(3)spring设计了三级缓存解决循环依赖的问题
一级缓存:singletonObjects,存放初始化后的单例对象;
二级缓存:earlySingletonObjects,存放实例化,未完成初始化的单例对象(未完成属性注入的对象);
三级缓存:singletonFactories,存放ObjectFactory对象;
(4)解决时,主要思想就是在缓存中备份,在需要取时直接取,不用要求其他资源,打破循环
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面试之spring相关 的相关文章

随机推荐