17个经典的Spring面试问答
Q1、什么是Spring Framework?
Spring是Java企业版应用程序开发中使用最广泛的框架.Spring的核心功能可用于开发任何Java应用程序。
我们可以使用它的扩展来在Java EE平台上构建各种Web应用程序,或者我们可以在简单的独立应用程序中使用它的依赖注入。
Q2、使用Spring有什么好处?
Spring旨在简化Java EE开发。以下是使用它的优点:
- 轻量级: 在开发中使用框架开销很小
- 控制反转(IoC): Spring容器负责处理各种对象的依赖关系,而不是创建或查找依赖对象
- 面向切面编程(AOP): Spring支持AOP将业务逻辑与系统服务分开
- IoC容器: 它管理Spring Bean生命周期和项目特定配置
- MVC框架: 用于创建Web应用程序或RESTful Web服务,能够返回XML / JSON响应
- 事务管理: 通过使用Java注释或Spring Bean XML配置文件减少JDBC操作
- 异常处理: Spring提供了一个方便的API,用于将特定于技术的异常转换为未经检查的异常
Q3、你知道哪些Spring子项目?简要描述一下。
- Core - 提供框架基本部分的关键模块,如IoC或DI
- JDBC - 此模块启用JDBC抽象层,无需对特定供应商数据库执行JDBC编码
- ORM集成 - 为流行的对象关系映射API提供集成层,例如JPA,JDO和Hibernate
- Web - 面向Web的集成模块,提供多部分文件上传,Servlet侦听器和面向Web的应用程序上下文功能
- MVC框架 - 实现模型视图控制器设计模式的Web模块
- AOP模块 - 面向切面的编程实现,允许定义干净的方法 - 拦截器和切入点
Q4、什么是依赖注入?
依赖注入是控制反转(IoC)的一个方面,它是一个通用概念,表明您不是手动创建对象,而是描述应如何创建它们。如果需要,IoC容器将实例化所需的类。
Q5、我们如何在Spring中注入Bean?
存在一些不同的选择:
- Setter注入
- 构造函数注入
- 变量注入
可以使用XML文件或注释完成配置。
Q6、注入Bean的最佳方法是什么?为什么?
建议的方法是使用构造函数参数用于强制依赖项,将setter用于可选依赖项。构造函数注入允许将值注入不可变字段并使测试更容易。
Q7、BeanFactory 和 ApplicationContext 的有什么区别?
BeanFactory 是一个表示提供和管理bean实例的容器的接口。默认实现在调用 getBean() 时实例化bean 。
ApplicationContext 是一个接口,表示容纳应用程序中所有信息,元数据和bean的容器。它还扩展了 BeanFactory 接口,但默认实现在应用程序启动时立马实例化bean。可以为单个bean覆盖此行为。
Q8、什么是Spring Bean?
Spring Bean是由Spring IoC容器初始化的Java对象。
Q9、Spring框架中的默认Bean范围是什么?
默认情况下,Spring Bean初始化为单例 。
Q10、如何定义bean的范围?
要设置Spring Bean的范围,我们可以在XML配置文件中使用 Scope 注释或“Scope”属性。
有五个支持的范围:
- singleton
- prototype
- request
- session
- global-session
Q11、单例Bean是线程安全的吗?
不,单例bean不是线程安全的,因为线程安全是关于执行的,而单例是一种专注于创建的设计模式。线程安全仅取决于bean实现本身。
Q12、SpringBean生命周期是什么样的?
首先,需要基于Java或XML bean定义来实例化Spring bean。可能还需要执行一些初始化以使其进入可用状态。之后,当不再需要bean时,它将从IoC容器中删除。
所有初始化方法的整个循环显示在下图上:
Q13、什么是Spring Java注解配置?
这是以类型安全的方式配置基于Spring的应用程序的方法之一。它是基于XML的配置的替代方案。
Q14、我们可以在一个项目中拥有多个Spring配置文件吗?
可以,在大型项目中,建议使用多个Spring配置以提高可维护性和模块性。
您可以加载多个Java注解的配置:
@Configuration
@Import({MainConfig.class, SchedulerConfig.class})
public class AppConfig {
或者加载一个包含所有其他配置的XML文件:
ApplicationContext context = new ClassPathXmlApplicationContext("spring-all.xml");
在XML文件中你也可以包含其它配置文件:
<import resource="main.xml"/>
<import resource="scheduler.xml"/>
Q15、什么是Spring Security?
Spring Security是Spring框架的一个独立模块,专注于在Java应用程序中提供身份验证和授权方法。它还会处理大多数常见的安全漏洞,例如CSRF攻击。
要在Web应用程序中使用Spring Security,您可以开始使用简单的注解:@EnableWebSecurity。
Q16、什么是Spring Boot?
Spring Boot是一个项目,它提供了一组预先配置的框架,以减少用户的配置,以便您可以使用最少量的代码启动并运行Spring应用程序。
Q17、列举一些Spring Framework中使用的设计模式?
- 单例模式: 单例范围的bean
- 工厂模式: Bean工厂类
- 原型模式: 原型范围的bean
- 适配器模式: Spring Web和Spring MVC
- 代理模式: 面向Spring Aspect的编程支持
- 模板方法模式: JdbcTemplate、HibernateTemplate 等。
- 前端控制器模式: Spring MVC DispatcherServlet
- 数据访问对象: Spring DAO支持
- 模型视图控制器: Spring MVC
“不积跬步,无以至千里”,希望未来的你能:有梦为马 随处可栖!加油,少年!
关注公众号:「Java 知己」,每天更新Java知识哦,期待你的到来!
- 发送「1024」,免费领取 30 本经典编程书籍。
- 发送「Group」,与 10 万程序员一起进步。
- 发送「面试」,领取BATJ面试资料、面试视频攻略。
- 发送「JavaEE 实战」,领取《JavaEE 实战》系列视频教程。
- 发送「玩转算法」,领取《玩转算法》系列视频教程。
17个经典的Spring面试问答的更多相关文章
- 25个经典的Spring面试问答
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- Spring学习总结(8)——25个经典的Spring面试问答
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- Spring面试问答Top 25
欢迎大家向我推荐你在面试过程中遇到关于Spring的问题. 我会把大家推荐的问题加入到以下的Spring经常使用面试题清单中供大家參考. 问题清单: 什么是Spring框架?Spring框架有哪些主要 ...
- Spring面试问答
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- Spring面试问答25题
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- 17、JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- 电话面试问答Top 50 --[伯乐在线]
今年是2015年,在过去几年中,电面(电话面试)是筛选程序员职位候选人的最流行的方式.它让雇佣双方很容易互相了解对方,候选人不需要去未来雇主的所在地,面试官也不用做额外的安排.这是我介绍程序员面试问题 ...
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- [转] JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
随机推荐
- 电池中的NTC功能是什么?【转】
电池的NTC功能是什么 因为可充电电池在不断的循环充电和放电过程中可能会导致电池温度的过高,导致电池原始性能下降.为了保持电池性能,密切监测电池温度非常重要,NTC在充电电池组内部的合适应用中可以起到 ...
- NumPy 会自动检测并利用 GPU 吗?
PyTorch 官网 60 分钟入门教程在介绍什么是 PyTorch 时有一句话:A replacement for NumPy to use the power of GPUs PyTorch 是 ...
- Ribbon负载均衡及Feign消费者调用服务
微服务调用Ribbon 简介 前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用没讲. 这里的话 就要用到Ribbon,结合eureka,来实现服务的调用: Ribbon是Netf ...
- 电竞行业年轻新潮流yabo055解读亚博电竞3.0时代
据相关统计,目前我国电竞行业yabo055点康姆的电竞竞菜市场规模最少在百亿级别以上,这是在以前完全不能想象的.2018年,中国正式开始进入Gaming 3.0时代.想要投入电竞行业的人员越来越多,不 ...
- Charles 使用笔记
一.介绍 Charles 属于抓包软件. Charles 多平台支持,mac.windows.linux. Charles 是收费软件,可以免费试用 30 天.试用期过后,未付费的用户仍然可以继续使 ...
- Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例
1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...
- Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
场景 使用Visual Studio 开发Winform程序,使用SVN进行项目版本管理. 在添加引用时,会出现在A电脑中添加了绝对路径的引用,在B电脑中就会出现找不到 并且将此引用标识为?的状态. ...
- 从零开始制作cli工具,快速创建项目脚手架
背景 在工作过程中,我们常常会从一个项目工程复制代码到一个新的项目,改项目配置信息.删除不必要的代码. 这样做的效率比较低,也挺繁琐,更不易于分享协作. 所以,我们可以制作一个cli工具,用来快速创建 ...
- 微信小程序 wxml 文件中如何让多余文本省略号显示?
废话不多说,之前写小程序碰到了一个问题,如何在 wxml 页面中截取数据? 1.wxs 取数据想必大家都会,不就是 substring 吗?但是这种方法在 wxml 页面中是无效的. 那还有 cs ...
- jQuery基础之表单验证
在使用jquery-validate.js插件时可以做一些初始化配置在初始化jquery-validate.js对象的时候,将外部的一些配置和该插件内部的一些默认配置合并在一起,如果有相同的配置,前者 ...