Java 杂谈Java学习笔记我爱编程

Spring 面试题汇编

2018-04-10  本文已影响224人  deniro

1 Spring 框架有哪些主要模块?

Spring 框架至今已集成了 20 多个模块 。 这些模块主要被分如下图所示的核心容器 、 数据访问 / 集成 、Web、AOP (面向切面编程) 、 工具 、 消息和测试模块 。

2 什么是依赖注入?什么是控制反转(IOC)? 在 Spring 中,有几种依赖注入方式?

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。

在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

注入方式:

3 在 Spring 中,有几种配置 Bean 的方式?

4 请解释一下 Spring Bean 的生命周期?

在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态 。 同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除 。
Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期 。Bean 的生命周期由两组回调(call back)方法组成 。
初始化之后调用的回调方法。
销毁之前调用的回调方法。

Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:

5 Spring Bean 有哪些作用域,它们之间有什么区别?

6 Spring 框架中的单例 Beans 是线程安全的么?

实际上,大部分的 Spring bean 并没有可变的状态 ( 比如 Service 类和 DAO 类 ) ,所以在某种程度上说 Spring 的单例 bean 是线程安全的 。 如果你的 bean 有多种状态的话(比如 View Model 对象),就需要自行保证线程安全 。

7 请解释一下,Spring 框架有哪些自动装配模式,它们之间有何区别?

8 Spring 框架中用到了哪些设计模式?请举例说明

Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:

9 说说 Springmvc 有哪些优点?

10 Spring 框架的事务管理有哪些优点?

11 AOP 的应用场景、原理 、AOP 好处?

AOP--Aspect Oriented Programming 面向切面编程;用来封装横切关注点,具体可以在下面的场景中使用:

原理: AOP 是面向切面编程,是通过动态代理的方式为程序添加统一功能,集中解决一些公共问题 。

优点:

12 Spring 中常见的创建对象的注解有哪些?

13 Spring 管理事务的方式有几种?

1、编程式事务,在代码中硬编码。(不推荐使用)

2、声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:

a、基于XML的声明式事务

b、基于注解的声明式事务

14 spring 中的核心类有那些,各有什么作用?

15 spring 中有哪些代理方式?实现原理是什么?这些方式的优缺点是什么?

1、若目标对象实现了若干接口, spring 使用 JDK 的 java.lang.reflect.Proxy 类代理 。

2、若目标对象没有实现任何接口, spring 则使用 CGLIB 库生成目标对象的子类 。

16 说说 IoC 容器的初始化过程?

17 说说 BeanFactory 和 ApplicationContext 的区别? 什么是延迟实例化,它的优缺点是什么?

BeanFactory 是 Spring 里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和获取对象的功能 。

两者装载 bean 的区别

延迟实例化
优点: 应用启动时占用资源很少,对资源要求较高的应用,比较有优势。
缺点:速度会相对来说慢一些 。 而且有可能会出现空指针异常的错误,而且通过 bean 工厂创建的 bean 生命周期会简单一些。 所有的 Bean 在启动的时候都加载,系统运行的速度快,而且可以尽早的发现系统中的配置问题 。

建议 web 应用,在启动的时候就把所有的 Bean 都加载了 。

18 说说 AOP 的实现原理?

Spring AOP 使用的是动态代理,所谓的动态代理就是说 AOP 框架不会去修改字节码,而是在内存中临时为方法生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法 。

Spring AOP 中的动态代理主要有两种方式, JDK 动态代理和 CGLIB 动态代理 。

上一篇下一篇

猜你喜欢

热点阅读