写点什么

【面试准备】Spring 框架面试题

  • 2021 年 11 月 11 日
  • 本文字数:2199 字

    阅读完需:约 7 分钟

2. Spring 的优缺点?

优点:


低侵入式设计


独立于各种应用服务器


依赖注入的特性将组件关系透明化,降低了耦合性


面向切面的特性允许将通用任务进行集中化处理


与第三方框架良好整合


缺点:


Spring 基于大量的 xml 配置文件,使得我们花了大量的时间放在配置上,拖慢了开发的进度,SpringBoot 问世后,提倡代码优于配置解决了这个问题。

3. Spring 的 IOC 和 AOP

1)IoC(Inversion of control): 控制反转


概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。


核心:bean 工厂;在 Spring 中,bean 工厂创建的各个实例称作 bean


2)AOP(Aspect-Oriented Programming): 面向切面编程


概念:AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。


代理的两种方式:


静态代理:


针对每个具体类分别编写代理类。


针对一个接口编写一个代理类。


动态代理:


针对一个切面编写一个 InvocationHandler,然后借用 JDK 反射包中的 Proxy 类为各种接口动态生成相应的代理类。

4. Spring 的 IOC 三种注入方式

setter


interface


constructor

5. Spring 的 7 个模块

![title](https://raw.githubusercontent.com/AY-Format


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


/images/master/gitnote/2019/03/31/Spring%E7%9A%847%E4%B8%AA%E6%A8%A1%E5%9D%97-1554010353453.jpg)


Spring Core:核心类库,提供 IOC 服务。


Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI、定时任务等)。


Spring AOP:AOP 服务。


Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理。


Spring ORM:对现有的 ORM 框架的支持。


Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传。


Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。

6. Spring 是什么?

Spring 是一个轻量级的 IOC 和 AOP 的容器框架。

7. BeanFactory 和 ApplicationContext 有什么区别?

①BeanFactroy 采用的是延迟加载形式来注入 Bean 的,即只有在使用到某个 Bean 时(调用 getBean()),才对该 Bean 进行加载实例化。


②ApplicationContext,它是在容器启动时,一次性创建了所有的 Bean。


③相对于基本的 BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置 Bean 较多时,程序启动较慢。

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

Spring 容器中的 bean 可以分为 5 个范围:


(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 作用域效果相同。

9. Spring 的自动装配

在 Spring 框架 xml 配置中共有 5 种自动装配:


(1)no:默认的方式是不进行自动装配的,通过手工设置 ref 属性来进行装配 bean。


(2)byName:通过 bean 的名称进行自动装配,如果一个 bean 的 property 与另一 bean 的 name 相同,就进行自动装配。


(3)byType:通过参数的数据类型进行自动装配。


(4)constructor:利用构造函数进行装配,并且构造函数的参数通过 byType 进行装配。


(5)autodetect:自动探测,如果有构造方法,通过 construct 的方式自动装配,否则使用 byType 的方式自动装配。


基于注解的方式:


使用 @Autowired 注解来自动装配指定的 bean。

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

(1) @Autowired 默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它 required 属性为 false)。


(2) @Resource 默认是按照名称来装配注入的,只有当找不到与名称匹配的 bean 才会按照类型来装配注入。

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

1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;


(2)单例模式:Bean 默认为单例模式。


(3)代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术;


(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。


(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如 Spring 中 listener 的实现–ApplicationListener。

12. spring 的事务传播行为

① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。


② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘


③ PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。


④ PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

评论

发布
暂无评论
【面试准备】Spring框架面试题