|[Spring](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#spring)|[SpringMVC](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#springmvc)|[Mybatis](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#mybatis)|[SpringBoot](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#springboot)|[Hibernate](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#hibernate)|[Redis](https://github.com/bigrotor187/awesome-java-interview/tree/master/framework#redis)|
|------|---------|-------|----------|---------|------|
# Spring
## Spring Framework
- [1、Spring 是如何简化 Java 开发的?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#1spring-%E6%98%AF%E5%A6%82%E4%BD%95%E7%AE%80%E5%8C%96-java-%E5%BC%80%E5%8F%91%E7%9A%84)
- [2、什么是 Spring Framework?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#2%E4%BB%80%E4%B9%88%E6%98%AF-spring-framework)
- [3、Spring Framework 有哪些优点?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#3spring-framework-%E6%9C%89%E5%93%AA%E4%BA%9B%E4%BC%98%E7%82%B9)
- [4、Spring 有哪些子项目吗?请简要描述。](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#4spring-%E6%9C%89%E5%93%AA%E4%BA%9B%E5%AD%90%E9%A1%B9%E7%9B%AE%E5%90%97%E8%AF%B7%E7%AE%80%E8%A6%81%E6%8F%8F%E8%BF%B0)
- [5、Spring 框架中用到了哪些设计模式?请举例说明。](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#5spring-%E6%A1%86%E6%9E%B6%E4%B8%AD%E7%94%A8%E5%88%B0%E4%BA%86%E5%93%AA%E4%BA%9B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E8%AF%B7%E4%B8%BE%E4%BE%8B%E8%AF%B4%E6%98%8E)
- [6、Spring 有哪些最佳实践?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#6spring-%E6%9C%89%E5%93%AA%E4%BA%9B%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5)
### **1、Spring 是如何简化 Java 开发的?**
为了降低 Java 开发的复杂性,Spring 采取了以下 4 种关键策略:
- 基于 POJO 的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
### **2、什么是 Spring Framework?**
Spring 是一个开源框架,Spring 诞生之初的主要目的是作为 EJB 的轻量级替代品,旨在降低应用程序开发的复杂度。它增强了 POJO,使之具备了之前只有 EJB 和其他企业级 Java 规范才具有的功能。
- Spring 是轻量级、松散耦合的。
> 它的轻量级主要是相对于 EJB 而言。但是随着 Spring 体系越来越庞大,添加 Spring 的依赖管理越来越耗时,写配置挤占了写应用程序逻辑的时间,所以后来推出了 Spring Boot。
- Spring 具有分层体系结构,允许用户选择组件,同时为 J2EE 应用程序开发提供了一个有凝聚力的框架。
- Spring 可以继承其他框架,如 Spring MVC、Hibernate、Mybatis 等,所以又被称为框架饿的框架(粘合剂、脚手架)
### **3、Spring Framework 有哪些优点?**
- 轻量级:在开发中使用框架会有一点点开销,但不会像重量级的 EJB 一样
- 控制反转(IOC):也叫依赖注入,Spring 容器负责处理各种对象的依赖关系,而不是创建或查找依赖对象
- 面向切面编程(AOP):Spring 支持 AOP 将业务逻辑与系统服务分开
- IOC 容器:它管理 Spring Bean 生命周期和项目特定配置
- MCV 框架(Spring Mvc):用于创建 Web 应用程序或 RESTful Web 服务,能够返回 XML / JSON 响应
- 事务管理:通过使用 Java 注解或 Spring Bean XML 配置文件,减少 JDBC 操作和文件上传等的样板代码量,适程序更加简洁
- 异常处理:Spring 提供了一个方便的 API,用于将特定技术的异常转换为非检查型的异常
### **4、Spring 有哪些子项目吗?请简要描述。**
- Core:提供 Spring 框架核心基础部分的关键模块,比如 Ioc 或 DI
- JDBC:此模块启用 JDBC 抽象层,无需对特定供应商数据库执行 JDBC 编码
- ORM 集成:为流行的对象映射 API 提供集成,例如 JPA、JDO、Hibernate、Mybatis 等
- Web:面向 Web 的集成模块,提供多部分文件上载,Servlet 监听器和面向 Web 的应用程序上下文功能
- MVC framework:一个实现了模型-视图-控制设计模式的 Web 模块
- AOP 模块:面向切面编程的实现允许定义更加简洁的方法-拦截器和切入点
![](https://github.com/bigrotor187/awesome-java-interview/blob/master/img/Spring%E7%BB%84%E4%BB%B6.png)
### **5、Spring 框架中用到了哪些设计模式?请举例说明。**
- 代理模式(Proxy Pattern) — 在 AOP 和 remoting 中被用的比较多。
- 单例模式(Singleton Pattern) — 在 Spring 配置文件中定义的 Bean 默认为单例模式。
- 模板方法(Template Method Pattern) —用来解决代码重复的问题。如 RestTemplate、JmsTemplate、JdbcTemplate 。
- 前端控制器(Front Controller) — Spring提供了 DispatcherServlet 来对请求进行分发。
- 视图帮助(View Helper) — Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
- 依赖注入(Dependency Injection) — 贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
- 工厂模式(Factory Pattern) — BeanFactory 用来创建对象的实例。
- 适配器模式(Adapter Pattern) — 主要在 Spring Web 和 Spring MVC 模块应用。
<br>
> 更多详情请参考: <br>
(1)[Spring 框架中的设计模式(一)](http://www.iocoder.cn/Spring/DesignPattern-1/)<br>
(2)[Spring 框架中的设计模式(二)](http://www.iocoder.cn/Spring/DesignPattern-2/)<br>
(3)[Spring 框架中的设计模式(三)](http://www.iocoder.cn/Spring/DesignPattern-3/)<br>
(4)[Spring 框架中的设计模式(四)](http://www.iocoder.cn/Spring/DesignPattern-4/)<br>
(5)[Spring 框架中的设计模式(五)](http://www.iocoder.cn/Spring/DesignPattern-5/)
### **6、Spring 有哪些最佳实践?**
- 为组件使用正确的注解可以一目了然当前层的作用。比如,对于控制层,使用 @Controller,对于业务层,使用 @Service, 对于 DAO 层使用 @Repository。
- 可以根据具体用途划分 Spring Bean,如 spring-jdbc.xml, spring-security.xml 等。
- 尽可能地配置 bean 依赖项,尽量避免自动装配。
- 对于应用程序级的属性,最好的方法是创建属性文件并在 Spring Bean 的配置文件中读取它。
<br>
> 更多详情请参考:[spring-best-practices](https://www.journaldev.com/2696/spring-interview-questions-and-answers#spring-best-practices)
## Spring Bean
- [1、什么是 Spring Bean?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#1%E4%BB%80%E4%B9%88%E6%98%AF-spring-bean)
- [2、Spring Bean 配置文件的重要性是什么?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#2spring-bean-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E9%87%8D%E8%A6%81%E6%80%A7%E6%98%AF%E4%BB%80%E4%B9%88)
- [3、Spring Bean 有哪些配置方式?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#3spring-bean-%E6%9C%89%E5%93%AA%E4%BA%9B%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F)
- [4、Spring Bean 支持哪几种 Bean Scope?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#4spring-bean-%E6%94%AF%E6%8C%81%E5%93%AA%E5%87%A0%E7%A7%8D-bean-scope)
- [5、Spring Bean 的生命周期是什么样的?](https://github.com/bigrotor187/awesome-java-interview/blob/master/framework/README.md#5spring-bean-%E7%9