没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论



















Spring 面试题:
1、Spring Framework 的特点
轻量级 容器 bean 工厂
* 方便解耦,简化开发
* Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理
* AOP 编程的支持
* Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
* 声明式事务的支持
* 只需要通过配置就可以完成对事务的管理,而无需手动编程
* 方便程序的测试
* Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序
* 方便集成各种优秀框架
* Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、
MyBatis、Quartz 等)的直接支持
2、Spring Framework 中有多少个模块,它们分别是什么?
Spring 核心容器 – 该层基本上是 Spring Framework 的核心。它包含以下模块:
Spring Core
Spring Bean
SpEL (Spring Expression Language)
Spring Context
数据访问/集成 – 该层提供与数据库交互的支持。它包含以下模块:
JDBC (Java DataBase Connectivity)
ORM (Object Relational Mapping)
OXM (Object XML Mappers)
JMS (Java Messaging Service)
Transaction
Web – 该层提供了创建 Web 应用程序的支持。它包含以下模块:
Web

Web – Servlet
Web – Socket
Web – Portlet
AOP – 该层支持面向切面编程
Instrumentation – 该层为类检测和类加载器实现提供支持。
Test – 该层为使用 JUnit 和 TestNG 进行测试提供支持。
几个杂项模块:
Messaging – 该模块为 STOMP 提供支持。它还支持注解编程模型,该模型用于从 WebSocket
客户端路由和处理 STOMP 消息
Aspects – 该模块为与 AspectJ 的集成提供支持。
3、Spring 的 IoC 理解
IOC,Inversion of Control,控制反转,指将对象的控制权转移给 Spring 框架,由 Spring 来
负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。
最直观的表达就是,以前创建对象的时机和主动权都是由自己把控的,如果在一个对象中使
用另外的对象,就必须主动通过 new 指令去创建依赖对象,使用完后还需要销毁(比如
Connection 等),对象始终会和其他接口或类耦合起来。而 IOC 则是由专门的容器来帮忙
创建对象,将所有的对象都存储在 Spring 容器中,当需要某个对象时,不再需要自己主动
去 new 了,只需从 Spring 容器中获取即可。也就是说,对于某个具体的对象而言,以前是
由自己控制它所引用对象的生命周期,而在 IOC 中,所有的对象都被 Spring 控制,控制对
象生命周期的不再是引用它的对象,而是 Spring 容器,由 Spring 容器帮我们创建、查找及
注入依赖对象,而引用对象只是被动的接受依赖对象,所以这叫控制反转。
4、IoC 的原理
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
通过 bean 组件的 class 获取类的完整路径
通过反射技术创建对象
由工厂模式对对象进行封装
Spring 通过 Bean 工厂来创建 Bean 对象(包含 id,class,和 property 三个属性)
Spring 通过反射机制来获取 class 对象的实例,利用实例来操作该 class 对象的相关属性和方
法
5、Spring 的 AOP 理解
AOP,称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象
产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”
(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用
于权限认证、日志、事务处理。
6、Spring AOP 中的动态代理主要有两种方式:
JDK 动态代理和 CGLIB 动态代理

JDK 动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口。JDK 动态代理
的核心是 InvocationHandler 接口和 Proxy 类,在获取代理对象时,使用 Proxy 类来动态创建
目标类的代理类(即最终真正的代理类,这个类继承自 Proxy 并实现了我们定义的接口),
当代理对象调用真实对象的方法时, InvocationHandler 通过 invoke()方法反射来调用目标类
中的代码,动态地将横切逻辑和业务编织在一起;
如果被代理类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。CGLIB
(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一
个子类对象,并覆盖其中特定方法并添加增强代码,从而实现 AOP。CGLIB 是通过继承的方
式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。
7、Spring 通知(Advice)有哪些类型
(1)前置通知(Before Advice):在连接点(Join point)之前执行的通知。
(2)后置通知(After Advice):当连接点退出的时候执行的通知(不论是正常返回还是异
常退出)。
(3)环绕通知(Around Advice):包围一个连接点的通知,这是最强大的一种通知类型。
环绕通知可以在方法调用前后完成自定义的行为。它也可以选择是否继续执行连接点或直接
返回它们自己的返回值或抛出异常来结束执行。
(4)最终通知(AfterReturning Advice):在连接点正常完成后执行的通知(如果连接点抛
出异常,则不执行)
(5)异常通知(AfterThrowing advice):在方法抛出异常退出时执行的通知
8、Spring Bean 的生命周期
Spring Bean 的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初
始化 Initialization --> 销毁 Destruction
① 通过构造器或工厂方法创建 bean 实例
② 为 bean 的属性设置值和对其他 bean 的引用
③ 调用 bean 的初始化方法
④ bean 可以使用了
⑤ 当容器关闭时,调用 bean 的销毁方法
9、 Spring 中 bean 的作用域:
(1)singleton:默认作用域,单例 bean,每个容器中只有一个 bean 的实例。
(2)prototype:为每一个 bean 请求创建一个实例。
(3)request:为每一个 request 请求创建一个实例,在请求完成以后,bean 会失效并被垃
圾回收器回收。
(4)session:与 request 范围类似,同一个 session 会话共享一个实例,不同会话使用不同
的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享
的存储变量的话,那么这全局变量需要存储在 global-session 中。
10、Spring 框架中都用到了哪些设计模式
(1)工厂模式:Spring 使用工厂模式,通过 BeanFactory 和 ApplicationContext 来创建对象
(2)单例模式:Bean 默认为单例模式
剩余10页未读,继续阅读
资源评论


haining711
- 粉丝: 9
- 资源: 43
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
