Spring & SpringMvc 面试题及答案

文章目录


前    言
本文仅收录了一些常见的Spring面试题,如需查看其它java面试题可查看我另一篇博文:

JAVA | 2021最全Java面试题及答案汇总


正    文

一、Spring面试题

1.你为什么使用 Spring?

轻量级:Spring 在大小和透明性方面绝对属于轻量级的,基础版本的 Spring 框架大约
只有 2MB。
控制反转(IOC):Spring 使用控制反转技术实现了松耦合。依赖被注入到对象,而不是
创建或寻找依赖对象。
面向切面编程(AOP): Spring 支持面向切面编程,同时把应用的业务逻辑与系统的服
务分离开来。
容器:Spring 包含并管理应用程序对象的配置及生命周期。
MVC 框架:Spring 的 web 框架是一个设计优良的 web MVC 框架,很好的取代了一些 web
框架。
事务管理:Spring 对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。
异常处理:Spring 提供一个方便的 API 将特定技术的异常(由 JDBC, Hibernate, 或 JDO
抛出)转化为一致的、Unchecked 异常。

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

1)singleton:默认,每个容器中只有一个 bean 的实例,单例的模式由 BeanFactory
自身来维护。
2)prototype:为每一个 bean 请求提供一个实例。
3)request:为每一个网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾
回收器回收。
4)session:与 request 范围类似,确保每个 session 中有一个 bean 的实例,在 session
过期后,bean 会随之失效。
5)global-session:全局作用域,global-session 和 Portlet 应用相关。当你的应用
部署在 Portlet 容器中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共
用全局的存储变量的话,那么这全局变量需要存储在 global-session 中。全局作用域与
Servlet 中的 session 作用域效果相同。

3.请问 Spring 有几种自动装配模式?

自动装配提供五种不同的模式供 Spring 容器用来自动装配 beans 之间的依赖注入:
no:默认的方式是不进行自动装配,通过手工设置 ref 属性来进行装配 bean。
byName:通过参数名自动装配,Spring 容器查找 beans 的属性,这些 beans 在 XML 配
置文件中被设置为 byName。之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
byType:通过参数的数据类型自动自动装配,Spring 容器查找 beans 的属性,这些 beans
在 XML 配置文件中被设置为 byType。之后容器试图匹配和装配和该 bean 的属性类型一样的
bean。如果有多个 bean 符合条件,则抛出错误。
constructor:这个同 byType 类似,不过是应用于构造函数的参数。如果在 BeanFactory
中不是恰好有一个 bean 与构造函数参数相同类型,则抛出一个严重的错误。
autodetect:如果有默认的构造方法,通过 construct 的方式自动装配,否则使用
byType 的方式自动装配。

4.对 Java 接口代理模式的实现原理的理解?

答:
1、字符串拼凑出代理类
2、用流的方式写到.Java 文件
3、动态编译.Java 文件
4、自定义类加载器把.class 文件加载到 jvm
5、返回代理类实例
其实核心就是根据接口反射出接口中的所有方法,然后通过拼凑或者 cglib 字节码的方
式把代理类反射出来,而代理类在内存中就会对某种类型的类进行调用,invocationHandler
(Jdk)或者 MethodInterceptor(cglib)

5.怎么理解面向切面编程的切面?

答:
切面指的是一类功能,比如事务,缓存,日志等。切面的作用是在目标对象方法执行前
或者后执行切面方法

6.什么是 IOC 容器?

答:
Spring IOC 负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理
这些对象的生命周期。
Ioc 是把对象的控制权较给框架或容器,容器中存储了众多我们需要的对象,然后我们
就无需再手动的在代码中创建对象。需要什么对象就直接告诉容器我们需要什么对象,容器
会把对象根据一定的方式注入到我们的代码中。注入的过程被称为 DI。有时候需要动态的
指定我们需要什么对象,这个时候要让容器在众多对象中去寻找,容器寻找需要对象的过程,
称为 DL(Dependency Lookup, 依赖查找)。按照上面的理解,那么 IOC 包含了 DI 与 DL,并
且多了对象注册的过程。

7.为什么需要代理模式?

答:
代理其实是对开闭原则和里氏代换原则的一种实现,它强调在不修改老代码的基础上扩
展功能,代理模式大大提高了代码的灵活性,同时也使代码的可读性变差,同时动态代理也
加大了内存溢出的风险。

8.讲讲静态代理模式的优点及其瓶颈?

答:
静态代理一种傻瓜式的对目标类的增强,其核心就两点,1、跟目标类实现同一接口 2、
持有目标类的引用。 如果需要对目标类方法进行增强,就只要调用代理类的方法,在方法
里面写增强功能然后调用目标类方法即可。优点就是代码直观且执行速度快,缺点就是不够
灵活,代码量比较大,每一种类型的目标类都需要单独写一个代理类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值