spring常见面试题

1、为什么要使用 spring?

1、spring 提供 ioc 技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。
2、spring 提供了事务支持,使得事务操作变的更加方便。
3、spring 提供了面向切片编程,这样可以更方便的处理某一类的问题。
4、更方便的框架集成,spring 可以很方便的集成其他框架,比如 MyBatis、hibernate 等。

2、 解释一下什么是 aop?

aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
简单来说就是统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。

3、解释一下什么是 ioc?

ioc:Inversionof Control(中文:控制反转)是 spring 的核心,对于 spring 框架来说,就是由 spring 来负责控制对象的生命周期和对象间的关系。
简单来说,控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了,由其他(类,第三方容器)来管理。

4、spring 有哪些主要模块?

spring core
框架的最基础部分,提供 ioc 和依赖注入特性。
spring context
构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
spring dao
Data Access Object 提供了JDBC的抽象层。
spring aop
提供了面向切面的编程实现,让你可以自定义拦截器、切点等。
spring web
提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
spring Web mvc
spring 中的 mvc 封装包提供了 Web 应用的 Model-View-Controller(MVC)的实现。

5、spring 常用的注入方式有哪些?

答:1、通过setter方法注入
2、通过构造器注入
3、通过注解注入

6、spring 中的 bean 是线程安全的吗?

spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
实际上大部分时候 spring bean 无状态的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。
有状态就是有数据存储功能。
无状态就是不会保存数据。
99、spring 支持几种 bean 的作用域?
答:singleton
spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是系统默认值;
prototype
每次从容器调用 bean 时都会创建一个新的实例,既每次 getBean()相当于执行 new Bean()操作;
--------------------------------Web 环境下的作用域:-----------------------------------
request
每次 http 请求都会创建一个 bean;
session
同一个 http session 共享一个 bean 实例;
globe-session
用于 portlet 容器,因为每个 portlet 有单独的 session,globalsession 提供一个全局性的 http session。

7、spring 自动装配 bean 有哪些方式?

no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。
byName:它根据 bean 的名称注入对象依赖项。
byType:它根据类型注入对象依赖项。
构造函数:通过构造函数来注入依赖项,需要设置大量的参数。
autodetect:容器首先通过构造函数使用 autowire 装配,如果不能,则通过 byType 自动装配。

8、spring 事务实现方式有哪些?

答:声明式事务
声明式事务也分为两种,一种是在xml配置文件中进行配置,另一种是注解式事务
编码事务
通过手动书写业务逻辑的方式来实现事务

9、说一下 spring 的事务隔离?

答:spring有五个事务的隔离级别
1、ISOLATION_DEFUALT
默认和数据库的级别一致
2、ISOLATIONREDAUNCOMMITED
未提交读取,事务没有提交之前就可被其他事务读取数据。会出现脏读,不可重复读,幻读的问题。
3、ISOLATIONREDACOMMITED
提交读取,事务提交后才能被其他事务读取到。不会出现脏读,但是仍会出现不可重复读和幻读。SQL server 的默认级别;
4、ISOLATIONREPEATABLEREDA
可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据,不会出现脏读,不可重复读,但会出现幻读。MySQL 的默认级别。
5、ISOLATION_SERIALIZABLE
序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。

10、Spring的循环依赖解决方式?

答:首先说一下循环依赖的形式,循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。
主要方法就是不使用基于构造函数的依赖注入。
1、在字段上使用@Autowired注解,让Spring决定在合适的时机注入。
2、用基于setter方法的依赖注入。
Spring通过将实例化后的对象提前暴露给Spring容器中的singletonFactories,解决了循环依赖的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值