面试复习Spring相关(一)

spring相关问题

1.谈谈对spring框架的了解,spring的核心是什么?

Spring是一个开源框架,为解决企业应用开发的复杂性而创建的。主要优势就是它的分层架构,分层架构允许开发者使用哪个组件,也为J2EE应用程序开发提供集成的框架。Spring使用基本的javaBean来完成以前只能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。Spring具有简单性、可测试性和松耦合的特性。简单来说,Spring是一个分层的JavaSE、JavaEE的轻量级开源框架。核心是控制反转和面向切面编程(AOC和IOP)。

2.AOP跟IOC是什么?

IOC(Inversion of Control)控制反转,DI(Dependency Injection)依赖注入。控制反转就是吧传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理,所谓的控制反转就是组件对对象控制权的转移,从代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系,DI是对IOC更准确的描述,即组件之间的依赖关系由容器在运行时决定,形象的来说,就是容器动态的将某种依赖关系注入到组件之中。
AOP(Aspect Oriented Programming)指的是一种程序设计范型,以一种成为切面(aspect)的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象、类或方法中的横切关注点。会影响到整个应用程序的关注功能,它跟正常的业务逻辑是正交的,没有必然的联系,但是几乎所有的业务逻辑都会涉及到这些关注功能,通常情况下,事务、日志、安全性等关注就是应用中的横切关注功能。AOP实现原理是动态代理,在执行方法前后,动态的织入一些需要的功能。

3.IOC容器的加载过程

4.Spring 依赖注入的几种方式?

Setter方法注入、构造器注入、Filed注入(用于注解方式)。

5.Spring设置为单例,那么线程问题怎么解决?

首先,在什么情况下,单例的Bean对象存在线程安全问题,当Bean对象对应的类存在可变的成员变量并且其中存在改编这个变量的线程时,多线程操作该Bean对象时会出现线程安全,产生的原因是当多线程中存在线程改变了Bean对象的可变成员变量时,其他线程无法访问该bean对象的初始状态,导致数据错乱。
所以我们在Bean对象中尽量避免定义可变的成员变量,需要的时候可以创建一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中。

6.Spring 是如何管理事务的?

Spring事务机制包括声明式事务和编程式事务,编程式事务Spring推荐使用TransactionTemplate,实际开发中使用声明式事务较多。声明式事务管理将我们从复杂的事务处理中解脱出来,获取链接、关闭链接、事务提交、回滚、异常处理等操作都不用我们来处理了,Spring会帮我们处理,使用了AOP面向切面编程实现的,本质就是在目标方法执行前后进行拦截,在目标方法执行之前加入或者创建一个事务,在执行方法后,根据情况提交或者回滚事务。
Spring事务管理主要包括三个接口:
1)PlatformTransactionManage:事务管理器,主要有三个方法(commit提交,rollback回滚,getTransaction获取事务状态)
2) TransactionDefinition:事务定义信息,用来定义事务相关的属性,给事务管理器PlatformTransactionManager使用,主要有四个方法(getIsolationLevel 获取事务隔离级别,getPropagationBehavior获取传播行为,getTimeout获取超时时间,isReadOnly是否只读)。
3) TransactionStatus:事务具体运行状态(事务管理过程中,每个时间点事务的状态信息)。
声明式事务的优点:不需要在业务逻辑中编写事务相关的代码,只需要@Transactional注解
缺点:声明式事务最细粒度作用于方法上,如果代码块需要事务需求,只能将代码块变为方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值