Spring面试题

一、 你对Spring框架的理解(特点)? Spring框架有哪些模块 ?

1、Spring是一个轻量级的IOC和AOP的容器框架,目的是简化企业应用程序的开发,使得开发者只需要关注业务需求;

特点:简化开发、解耦、集成其他框架

简化开发:spring对常用的API进行了封装;比如说对jdbc的封装,使用spring jdbc访问数据库,就不需要考虑如何获取连接和关闭的问题了

解耦:spring帮我们管理软件之间的关系,这样对象之间的耦合性就降低了

集成其他框架:方便优化和扩展其他功能;比如说和Mybatis的集成

2、Spring框架已经集合成20多个模块;

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

Spring Context:提供框架式的Bean访问方式以及企业级功能

Spring AOP:提供AOP服务

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

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

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

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

二、Spring的优点

1、简化开发、解耦、集成其他框架

2、低侵入式设计,代码污染级别低

3、Spring的DI机制提高了软件之间的解耦

4、Spring AOP支持将一些通用的任务进行集中式的管理,例如:安全、事务、日志等

三、什么是控制反转(IOC),什么是依赖注入(DI)?

IOC:就是对象之间的依赖关系由容器来创建,本来这层关系是由开发者自己来创建和维护的,使用spring框架后交给容器去管理维护,

这就是控制反转,BeanFactory接口是Spring Ioc容器的核心接口

DI:在spring容器中,通过set方法建立对象之间的依赖关系

控制反转是目标,而依赖注入是我们实现控制反转的一种手段

四、Java中实现依赖注入的三种方式

1、构造器注入

2、set方法注入

3、接口注入

五、Spring容器中如何创建对象

无参构造创建

静态工厂创建

实例工厂创建

六、Spring有几种配置方式

1、基于XML文件配置

2、基于注解的配置

注解代替XML方式的bean元素的配置,

这就是组件扫描,容器会扫描指定的包以及子包下面所有的类,如果类有一些特定的注解,则纳入容器进行管理

3、基于Java的配置

七、Spring Bean的生命周期?

Spring Bean的生命周期指的是Bean元素被实例化,和被销毁的过程。我们通过init-method属性指定初始化方法;通过destroy-method方法指定销毁方法

八、什么叫延迟加载?

容器启动后将所有作用域为单例的bean创建好,但是有的业务场景我们不需要提前创建好

我们可以在bean中设置lazy-init为true,容器启动后作用域为单例的bean就不再创建

九、什么叫自动装配?

就是将一个bean注入其他的bean的property中,默认情况下,容器不会自动装配,需要我们手动设定。Spring可以通过Bean Factory的注入方式来搞定bean之间的依赖关系,达到自动装配的目的

十、Spring Bean元素的作用域?

Spring Bean元素支持5种作用域

1、Singleton:单例模式,在整个Spring IOC的容器中,在此模式定义的bean将只有一个实例

2、Prototype:多例模式,每次通过容器getBean方法获取bean时,都会产生一个新的Bean的实例

3、Request:对于每次http请求时,使用request定义的bean都会产生一个新的实例,只有在web应用时,作用域才会生效

4、Session:对于每次http session请求时,使用session定义的bean都会产生一个新的实例

5、Globalsession:每个全局的http session,使用session定义的bean都会产生一个新的实例

十一、Spring Bean是线程安全的吗?

Spring Bean并没有对单例的bean进行多线程的封装处理,线程安全问题和并发问题需要开发者自己考虑

实际上,大部分的bean的状态是固定的,因此spring单例的bean是安全的;如果bean有多种状态,就需要考虑线程安全的问题了

十二、Spring框架中都用到了哪些设计模式

1、代理模式,在AOP中被使用最多

2、单例模式,在Spring配置文件中定义bean的时候默认的是单例模式

3、工厂模式,BeanFactory用来创建对象的实例

4、模板方法,用来解决重复性代码

5、前端控制器,Spring提供了DispatcherServlet对请求进行分发

6、视图帮助,Spring提供了一系列的JSP标签

7、依赖注入,它是贯穿于BeanFactory/ApplicationContext接口的核心理念

十三、Spring AOP(面向切面)编程的原理

AOP面向切面编程是一种思想,它是在业务处理过程中的切面进行提取,以达到优化代码的目的,减少重复代码的目的,比如我们在编写各个模块的业务逻辑时,都会写日志记录、事务控制等等这些明显存在重复的代码,我们运用面向切面的编程思想,采用横切技术,将代码中的重复部分抽取出来放在其他地方集中管理,调用。形成日志切面、事务切面等,使工作效率提高,代码变得整洁优雅,是面向对象编程的一种扩展

Spring AOP的编程原理:

代理机制

JDK的动态代理:只能用于实现接口的类产生代理

Cglib代理:针对于没有实现接口的类产生代理,应用的是底层的字节码增强技术,生成当前类的子类对象

十四、什么是Spring MVC?

Spring MVC是一个基于MVC框架用于简化web应用程序开发的应用开发框架,它是spring的一部分,属于表现层的框架

MVC(Model 模型,View 视图,Controller 控制器)

它是一种软件架构思想,也是一种开发模式,它将软件划分为三个模块,分别是模型、视图、控制器。

模型:用于封装业务逻辑处理;视图:用于数据展现和操作界面;控制器:用于协调视图和模型;

处理流程:视图将请求发送给控制器,控制器选择对应的模型来处理,模型将处理结果交给控制器,控制器选择合适的视图来展现处理结果

十五、Spring MVC的五大组件

1、前端控制器(DispatcherServlet)

2、映射处理器(HandlerMapping)

3、处理器(Controller)

4、模型和视图(ModelAndView)

5、视图解析器(ViewResolver)

十六、Spring MVC的运行原理

客户端将请求提交到前端控制器,前端控制器查询一个或多个映射处理器,找到处理请求的Controller,前端控制器将请求提交到Controller,Controller调用业务逻辑处理后,返回模型和视图,前端控制器查询一个或多个视图解析器,找到模型和视图指定的视图,视图负责将结果展现给用户

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容