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面试问答的更多相关文章

  1. 25个经典的Spring面试问答

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  2. Spring学习总结(8)——25个经典的Spring面试问答

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  3. Spring面试问答Top 25

    欢迎大家向我推荐你在面试过程中遇到关于Spring的问题. 我会把大家推荐的问题加入到以下的Spring经常使用面试题清单中供大家參考. 问题清单: 什么是Spring框架?Spring框架有哪些主要 ...

  4. Spring面试问答

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  5. Spring面试问答25题

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  6. 17、JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  7. 电话面试问答Top 50 --[伯乐在线]

    今年是2015年,在过去几年中,电面(电话面试)是筛选程序员职位候选人的最流行的方式.它让雇佣双方很容易互相了解对方,候选人不需要去未来雇主的所在地,面试官也不用做额外的安排.这是我介绍程序员面试问题 ...

  8. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  9. [转] JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

随机推荐

  1. C编程小结1

    1. ‘\0’表示字符串结束符 2. 变量之间互相赋值一定要考虑他们的数据类型,要强制转换匹配上了或者进行一些处理才能赋值,同时读程序的时候也要注意这一点,否则可能看不懂.如: sData[0]=wD ...

  2. s3c2440裸机-清bss原理及实现

    1.清bss的引入(为什么要清bss) 我们先举个例子: #include "s3c2440_soc.h" #include "uart.h" char g_C ...

  3. Django django-cors-headers实现防跨域

    安装 pip install django-cors-headers 注册应用 INSTALLED_APPS = ( ... 'corsheaders', ... ) 中间层设置 MIDDLEWARE ...

  4. VUE脚手架使用

    什么是vue脚手架?   他是一个快速构建vue项目的工具,通过他,我们可以将vue所需要的文件安装完成. vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack- ...

  5. Web安全测试学习笔记-DVWA-登录密码爆破(使用Burp Suite)

    密码爆破简单来说,就是使用密码本(记录了若干密码),用工具(手工也可以,if you like...)一条条读取密码本中的密码后发送登录请求,遍历密码本的过程中可能试出真正的密码. 本文学习在已知登录 ...

  6. 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

    在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...

  7. JavaScript -- 筑基

    本片博客记录了我JavaScript筑基阶段的学习内容,JavaScript不是Java,但是我下意识的把它和java对比学习,有些地方比较有趣,有些地方从java角度看,简直匪夷所思,不过现在总体感 ...

  8. 从web到游戏,走出舒适区

    最近很久没有更新博客了,实在太忙.因为在这段时间里我做了一个改变了我现在职业生涯的一个决定,而我现在正在为这个决定而加倍的努力付出. 我认为我还是有必要把这个比较重要的节点记录下来,我也是第一次在自己 ...

  9. Jupyter Notebook 使用小记

    简介 Jupyter Notebook 是一款几乎综合所有编程语言,能够把软件代码.计算输出.解释文档.多媒体资源整合在一起的多功能科学计算平台.具有如下优点: 整合所有资源 交互性编程体验 零成本重 ...

  10. 易优CMS:if的基础用法

    [基础用法] 名称:if 功能:条件判断,比switch判断标签更灵活些,视个人习惯而用. 语法: {eyou:if condition='($eyou.field.has_children > ...