1、什么是 Spring 框架?Spring 框架有哪些主要模块?
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。
以下是 Spring 框架的基本模块:
Core module
Bean module
Context module
Expression Language module
JDBC module
ORM module
OXM module
Java Messaging Service(JMS) module
Transaction module
Web module
Web-Servlet module
Web-Struts module
Web-Portlet module
2、使用 Spring 框架的好处是什么?
- 轻量:Spring 是轻量的,基本的版本大约 2MB
- 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们
- 面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开
- 容器:Spring 包含并管理应用中对象的生命周期和配置
- MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品
- 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
- 异 常 处 理 : Spring 提 供 方 便 的 API 把 具 体 技 术 相 关 的 异 常 ( 比 如 由 JDBC ,Hibernate or JDO 抛出的)转化为一致的 unchecked 异常
3、Spring 框架中都用到了哪些设计模式?
Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:
- 代理模式—在 AOP 和 remoting 中被用的比较多。
- 单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。
- 模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTempl
ate。 - 前端控制器—Spring 提供了 DispatcherServlet 来对请求进行分发。
- 视图帮助(View Helper )—Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码
整合在视图里。 - 依赖注入—贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
- 工厂模式—BeanFactory 用来创建对象的实例
4、Spring Bean 的作用域之间有什么区别?
Spring 容器中的 bean 可以分为 5 个范围。所有范围的名称都是自说明的,但是为了避免混淆,还
是让我们来解释一下:
- singleton:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个
bean 的实例,单例的模式由 bean factory 自身来维护。 - prototype:原形范围与单例范围相反,为每一个 bean 请求提供一个实例。
- request:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,
bean 会失效并被垃圾回收器回收。 - Session:与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean
会随之失效。 - global- session:global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工作
时,它包含很多 portlet。如果 你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全
局变量需要存储在 global-session 中。
全局作用域与 Servlet 中的 session 作用域效果相同
5、ApplicationContext 通常的实现是什么?
- FileSystemXmlApplicationContext:此容器从一个 XML 文件中加载 beans 的定义,
XMLBean 配置文件的全路径名必须提供给它的构造函数。 - ClassPathXmlApplicationContext:此容器也从一个 XML 文件中加载 beans 的定义,这里,你需要正确设置 classpath 因为这个容器将在 classpath 里找 bean 配置。
- WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定义了一个 WEB 应用的所有 bean。
6、@Required 、@Autowired 、@Qualifier 注解
@Required这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的属性值或通过自动装配,若@Required 注解的 bean 属性未被设置,容器将抛出BeanInitializationException。
@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required 一样,修饰 setter 方法、构造器、属性或者具有任意名称和/或多个参数的 PN方法。
@Qualifier 注解 当有多个相同类型的 bean 却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean。
5、面向切面编程(AOP)
面向切面的编程,或 AOP,是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理;
AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。比如,一个日志模块可以被称作日志的 AOP 切面。根据需求的不同,一个应用程序可以有若干切面。在SpringAOP 中,切面通过带有@Aspect 注解的类实现
Spring 切面可以应用五种类型的通知:
before:前置通知,在一个方法执行前被调用。
after:在方法执行之后调用的通知,无论方法执行是否成功。
after-returning:仅当方法成功完成后执行的通知。
after-throwing:在方法抛出异常退出时执行的通知。
around:在方法执行之前和之后调用的通知。