Spring面试题

Q:对spring框架的理解?

Spring是一个轻量级开源框架,它存在的目的是为了解决企业级应用开发中业务逻辑层其他各层的耦合问题。
Spring负责基础架构,开发者可以专注于程序编写。其中最重要的核心是IOC和AOP。

IOC是控制反转:是指将类的创建依赖关系写在配置文件中,通过依赖注入的方式将其注入到相应的类中,把对象的创建交给工厂。
AOP是面向切面编程:是指将程序中重复的代码抽取出来,在不修改源码的基础上,使用动态代理的技术,增强已有的方法,提高代码的复用性。


Q:IOC和DI原理 ?(map集合)

  1. 解析spring的清单文件,就是xml解析,把xml内容解析到内存中。
  2. 循环遍历清单文件中的bean节点,每一个bean节点对应创建一个对象。
  3. 把创建完的对象存储到一个map集合,此map集合就是一个容器。
  4. 如果bean节点有property节点,需要注入数据。
    循环每一个bean节点中的property节点,读取name属性和ref属性
    反射调用set方法,并对象注入。

Q、依赖注入的几种方式?

依赖注入(DI)思想:Spring使用set方法或者带参数的构造方法创建对象时,将其属性自动设置为所需值的过程。
分类:接口注入、Setter方法注入、构造器注入。

(1)接口注入 :由于灵活性和易用性比较差,从Spring4开始已被废弃。
(2)构造器依赖注入:是容器通过触发一个类的构造器来实现。
(3)Setter方法注入:容器通过JavaBean规范的setter方法完成注入的,灵活且可读性高。

依赖注入:是当前最流行的IoC实现方式。


Q:请描述Spring中bean的作用域?

Spring中Bean有五种作用域

名称描述
singleton单例的(默认值): 一个bean 在 ioc 容器中只有一个实例
prototype多例的:一个 bean在ioc容器中可以有多个实例
request作用于web应用的请求范围
session作用于web应用的会话范围
global-session(全局session)作用于集群环境的会话范围,当不是集群环境时,他就是session

Q:Spring bean 的生命周期?

Bean 定义:在配置文件里面用来进行定义。

Bean 初始化:有两种方式初始化:
①在配置文件中通过指定 init-method 属性来完成
②实现 org.springframwork.beans.factory.InitializingBean 接口

Bean 调用:有三种方式可以得到 bean 实例,并进行调用

Bean 销毁:销毁有两种方式
①使用配置文件指定的 destroy-method 属性
②实现 org.springframwork.bean.factory.DisposeableBean 接口


Q:Spring 的通知是什么?有哪几种类型?

通知是个在方法执行前或执行后要做的动作,实际上是程序运行时要通过 SpringAOP框架触发的代码段。

Spring 切面可以应用五种类型的通知:

before:前置通知,在一个方法执行前被调用。

after-returning: 后置通知,仅当方法成功完成后执行的通知。

after-throwing: 异常通知,在方法抛出异常退出时执行的通知。

after: 最终通知,在方法执行之后调用的通知,无论方法执行是否成功。

around: 环绕通知,在方法执行之前和之后调用的通知。


Q:Spring事务的隔离级别?

1、ISOLATION_DEFAULT:默认,这是个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别
2、ISOLATION_READ_UNCOMMITTED:读未提交,允许另外一个事务可以看到这个事务未提交的数据。
3、ISOLATION_READ_COMMITTED:读已提交,保证一个事务修改的数据提交后才能被另一事务读取,而且能看到该事务对已有记录的更新。
4、ISOLATION_REPEATABLE_READ:可重复读,保证一个事务修改的数据提交后才能被另一事务读取,但是不能看到该事务对已有记录的更新。
5、ISOLATION_SERIALIZABLE:串行化,一个事务在执行的过程中完全看不到其他事务对数据库所做的更新。


Q:Spring的事务传播行为有哪些?

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

2、PROPAGATION_Supports:(有就加入,没有就不要)支持当前事务。如果当前存在事务,就加入该事务。如果当前不存在事务,就以非事务执行。

3、PROPAGATION_mandatory:(有就加入,没有就跑异常)支持当前事务。如果当前存在事务,就加入该事务。如果当前不存在事务,就抛出异常。

4、PROPAGATION_Required_New:(无论是否有都创建新事务)创建新事务,无论当前存不存在事务,都创建新事务。

5、PROPAGATION_Not_Supported:(不要事务,有就挂起)以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6、PROPAGATION_Never:(不要事务,有就抛异常)以非事务方式执行,如果当前存在事务,则抛出异常。

7、PROPAGATION_Nested:(有就嵌套,没有就创建)如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。


Q: 核心容器BeanFactory 与 AppliacationContext 有什么区别?

ApplicationContext:(继承BeanFactory)
它在构建核心容器时,创建对象采取的策略是立即加载的方式。也就是说,只要一读完配置文件马上就创建文件中配置的对象。执行完该条语句,构造方法被执行。(单例对象使用 采用此接口)

BeanFactory:
它在构建核心容器时,创建对象采用的策略是延迟加载的方式。也就是说,什么时候根据ID获取对象了,什么时候才真正的创建对象。(多例对象使用)

ApplicationContext的三个常用实现类:

ClassPathXmlApplicationContext:他可以加载类路径下的配置文件。
FileSystemXmlApplicationContext:他可以加在磁盘任一路径下的配置文件(必须有访问权限)
AnnotationConfigApplicationContext: 他是用于读取注解创建容器的,是明天的内容。


Q:Spring 框架中的单例 bean 是线程安全的吗?

不是线程安全的。当存在共享变量时,大家都能去调用,此时就存在线程安全问题。


Q: Spring 中的设计模式有哪些?

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

单例模式:
Bean默认为单例模式。

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

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

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




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值