Spring中的一些问题

什么是Spring框架?Spring框架的核心有哪些模块组成?

答:Spring框架是基于Java开发出来的一套轻量级框架,帮助开发者管理对象及其依赖关系,还提供通用日志记录、性能统计、安全控制、异常处理等能力。
(1)IoC模块;
(2)AOP模块;
(3)消息模块;
(4)数据访问/集成模块;
(5)Web模块;
(6)测试模块

在Spring框架中,什么是控制反转?什么是依赖注入?依赖注入的实现方式有哪些?

答:控制反转:在Spring中是一种通过XML文件或者注解描述并通过第三方去产生或者获取特定对象的方式。对象的实例不再由调用者来创建,而是由Spring容器来创建。控制权由原来的调用者转移到Spring容器,控制权发生了反转。
依赖注入:从Spring容器角度,该容器负责将被依赖的对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,即Spring的依赖注入。
依赖注入的实现方式:
(1)使用构造方法注入;
(2)使用属性的setter方法注入;
(3)实现接口的方法注入。

构造方法注入和设值注入有什么区别?

答:
(1)设值注入支持大部分依赖注入
(2)设值注入不会重写构造方法的值
(3)在使用设值注入时还不能保证某种依赖是否已经被注入
(4)在设置注入如果发生对象之间的互相依赖(循环依赖),在创建某对象会发生ObjectCurrentlyInCreationException异常

BeanFactory和ApplicationContext有什么区别?BeanFactory和FactoryBean有什么区别?

答:BeanFactory理解为含有Bean集合的工厂类。它是Spring IoC的基础容器接口,还能在实例化对象时生成协作类之间的关系,包含对Bean生命周期的控制。
ApplicationContext是建立在BeanFactory之上的一种Spring IoC的高级容器接口,它除了具有BeanFactory的所有功能以外,还具有
(1)提供了支持国际化的文本消息
(2)统一的资源文件读取方式
(3)已在监听器中注册的Bean的事件
BeanFactory常用的实现类是XmlBeanFactory;ApplicationContext常用的实现类是ClassPathXmlApplicationContext、FileSystemXmlApplicationContext
和XmlWebApplicationContext。
FactoryBean是一个工厂Bean,是一个Bean,作用是产生其他Bean实例。仅仅需要提供一个工厂方法,该方法用来返回其他Bean的实例。当用户使用容器时候,可以使用转义字符“&”来得到FactoryBean本身。

Spring Bean作用域的区别是什么?

答:
(1)singleton
(2)prototype
(3)request
(4)session
(5)global-session

请解释Spring Bean的生命周期。

答:Spring提供了以下4种方式来管理Bean的生命周期事件:
(1)InitializingBean和DisposableBean回调接口
(2)针对特殊行为的其他Aware接口
(3)Bean配置文件中的customInit()方法和customDestroy()方法
(4)@PostConstruct和@PreDestroy注解方式

如何在Spring配置文件中注入一个Java集合?

答:Spring提供了以下4种集合类的配置元素:
(1)标签用来装配可重复的list值
(2)标签用来装配没有重复的set值
(3)标签用来注入键和值,可以为任何类型的键值对
(4)标签支持注入键和值都是字符串类型的键值对

什么是AOP?实现AOP机制的有哪些方法?什么是Pointcut?

答:
面向切面编程:(Aspect Oriented Programming, AOP)是对面向对象编程(Object Oriented Programming, OOP)补充,在不改变原有程序的基础上为代码段增加新的功能,对其进行增强处理,设计思想来源于代理设计模式。主要关心两个问题,在什么位置和执行什么功能。
切入点Pointcut:对连接点的特征进行描述,可以使用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。

什么是通知Advice?通知的类型有哪些?

答:通知Advice:即增强处理,切面在某个特定连接点上执行的代码逻辑。
通知的类型:(1)前置通知;(2)后置通知;(3)异常抛出通知;(4)环绕通知;(5)最终通知。

什么是事务?事务的特征属性是什么?

答:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。事务具有4个属性:
原子性、一致性、隔离性和持久性。通常称为ACID特性。

Spring事务的传播属性有哪些?

答:
其中spring7个事务传播属性:
PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED – 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER – 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

数据库事务隔离级别有哪些?

答:
5个隔离级别:
ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。
另外四个与JDBC的隔离级别相对应;
ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取
该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,
不可重复读外,还避免了幻像读。

关键词:
1)幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
2)不可重复读取:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
3)脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。

什么是编程式事务管理?什么是声明式事务管理?

答:
编程式事务管理:PlatformTransactionManager、TransactionDefinition 和TransactionStatus 三个核心接口,如果方法需要实施事务管理,我们首先需要在方法开始执行前启动一个事务,调用PlatformTrans-
actionManager.getTransaction(…) 方法便可启动一个事务。创建并启动了事务之后,便可以开始编写业务逻辑代码,然后在适当的地方执行事务的提交或者回滚。
声明式事务管理:Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

绘图描述Spring MVC的请求处理流程。

答:
在这里插入图片描述

在开发Spring MVC应用时候如何xml配置部署DispatcherServlet?

答:

<servlet>
     		<servlet-name>springmvc</servlet-name> 	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      	<init-param>
        		<param-name>contextConfigLocation</param-name>
        		<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
      	</init-param>
      	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
      	<servlet-name>springmvc</servlet-name>
      	<url-pattern>*.do</url-pattern>
</servlet-mapping>

Spring中用到了哪些设计模式?

答:
(1)单例模式
(2)工厂模式
(3)代理模式
(4)适配器模式
(5)装饰模式
(6)观察者模式
(7)策略模式
(8)模板方法模式
(9)委派模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值