spring源码分析第六天------spring经典面试问题

spring源码分析第六天------spring经典面试问题

1、Spring5 新特性及应用举例

在这里插入图片描述

2、Spring 经典的面试问题

a、什么是 Spring 框架?Spring 框架有哪些主要模块?

Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮 助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。

b、使用 Spring 框架能带来哪些好处?

IOC和DI、事务性、springMVC、Spring AOP

c、在 Java 中依赖注入有以下三种实现方式:

接口注入–>@Autowired:自动装配

构造器注入:@Autowired //构造器注入  
private TestBean11(String message) {  this.message = message;  
}setter注入:private String message;  
@Autowired //setter方法注入  
public void setMessage(String message) {  this.message = message;  
} 字段注入:

public class TestBean12 {
@Autowired //字段注入
private String message;
//省略getter和setter
}

Setter 方法注入 :

    //注入对象springDao  
private SpringDao springDao;  //一定要写被注入对象的set方法  public void setSpringDao(SpringDao springDao) {  this.springDao = springDao;  
} 

构造器注入

//注入对象springDao  
private SpringDao springDao;  
private User user;  public SpringAction(SpringDao springDao,User user){  this.springDao = springDao;  this.user = user;  System.out.println("构造方法调用springDao和user");  
}  

3、BeanFactory 和 ApplicationContext 有什么区别?

BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接 收到客户端请求时将对应的 bean 实例化。
BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置 中解放出来。
BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization Methods)和销毁方法(destruction Methods)。
从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置, 根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的功能。
提供了支持国际化的文本消息;
统一的资源文件读取方式;
已在监听器中注册的 bean 的事件

4、Spring 提供几种配置方式来设置元数据?
将 Spring 配置到应用开发中有以下三种方式:
1.基于 XML 的配置
2.基于注解的配置
3.基于 Java 的配置

5、如何用基于 Java 配置的方式配置 Spring?

Spring 对 Java 配置的支持是由@Configuration 注解和@Bean 注解来实现的。
由@Bean 注解的方法将 会实例化、配置和初始化一个新对象,这个对象将由 Spring 的 IOC 容器来管理。
@Bean 声明所起到的 作用与 元素类似。
被@Configuration 所注解的类则表示这个类的主要目的是作为 bean 定义的资源。 被@Configuration 声明的类可以通过在同一个类的内部调用@bean 方法来设置嵌入 bean 的依赖关 系。

6、怎样用注解的方式配置 Spring?

1.@Required:该注解应用于设值方法。
2.@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
3.@Qualifier:该注解和@Autowired 注解搭配使用,用于消除特定 bean 自动装配的歧义。
4.JSR-250 Annotations:Spring 支持基于 JSR-250 注解的以下注解,@Resource、@PostConstruct 和 @PreDestroy。

7、请解释 Spring Bean 的生命周期?

在这里插入图片描述

8、Spring Bean 作用域之间的区别?

1.singleton:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个 bean 的实例,单例的模式由 bean factory 自身来维护。

2.prototype:原形范围与单例范围相反,为每一个 bean 请求提供一个实例。

3.request:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。

4.Session:与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之失效。

5.global-session:global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工 作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全 局变量需要存储在 global-session 中。 全局作用域与 Servlet 中的 session 作用域效果相同。

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

在这里插入图片描述
10、FileSystemResource 和 ClassPathResource 有何区别?

在这里插入图片描述

11、Spring 框架中都用到了哪些设计模式?

1、代理模式—在 AOP 和 remoting 中被用的比较多。

2、单例模式:在 spring 配置文件中定义的 bean 默认为单例模式。

3、模板模式:用来解决代码重复的问题。 比如. RestTemplate, JmsTemplate, JpaTemplate。

4、委派模式:Srping 提供了 DispatcherServlet 来对请求进行分发。

5、工厂模式:BeanFactory 用来创建对象的实例,贯穿于 BeanFactory / ApplicationContext 接 口的核心理念。

6、代理模式:AOP 思想的底层实现技术,Spring 中采用 JDK Proxy 和 CgLib 类库。

12、在 Spring 框架中如何更有效的使用 JDBC?

使用 Spring JDBC 框架,资源管理以及错误处理的代价都会减轻。开发人员只需通过 statements 和 queries 语句从数据库中存取数据。Spring 框架中通过使用模板类能更有效的使用 JDBC,也就是所谓 的 JdbcTemplate。

13、请解释下 Spring 框架中的 IOC?

BeanFactory 接 口 提 供 了 一 个 先 进 的 配 置 机 制 , 使 得 任 何 类 型 的 对 象 的 配 置 成 为 可 能 。 ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上 添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于 国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进阶之路————scp指令介绍与演示

引言 目前市场上很多终端软件都自带文件传输功能,且多为图形化界面,操作简单无脑。但是本着“指令最高端,拖拽贼JBLow”的原则,今天学习一下文件传输的命令:scp 操作演示 准备两台linux服务器 (我的是弄…

Mybatis源码分析第一天------Mybatis实用篇

Mybatis源码分析第一天------Mybatis实用篇 一切最基本的操作就是参考官方文档:https://mybatis.org/mybatis-3/zh/configuration.html 1、是什么 什么是 MyBatis? a、MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级…

深入理解Tomcat和Jetty源码之第一篇前奏知识

深入理解Tomcat和Jetty源码之第一篇前奏知识 这周开始对Tomcat和Jetty的源码和框架产生了浓厚的兴趣,接下来想记录一下学习Tomcat和Jetty源码的心得和体会,有兴趣的朋友可以关注一下,我主要以思维导图的方式来展现整体的学习思路~ 今天的整体…

Linux进阶之路————组管理与权限管理

引言 这篇博客将会总结一些关于组的概念和相关操作,以及文件的一些权限管理。 一、组的基本介绍 在前面的博文《Linux进阶之路————用户管理》已经有提到用户组的概念,实际上,组的概念并不局限于用户,文件和目录都有组的概念…

深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器

深入理解Tomcat和Jetty源码之第二篇servlet规范和servlet容器 思维导图总览 这篇推送主要讲servlet的规范和什么是servlet容器? 1、先来讲讲servlet规范: 2、再用一个图来说明一下servlet容器是如何工作的 3、web应用 4、本节的重点,filter和…

JavaScript————FormData实现多文件上传

引言 星期四的时候,我遇到了一个文件上传的问题,与以往不同的是,这一次上传的是多个文件,而且涉及到了久违的javascript代码。 虽然最后实现的并不尽如人意,不过也算是完成了功能,接下来就把我发现的一些问…

深入理解Tomcat和Jetty源码之第三篇tomcat系统架构上:连接器是如何设计的

我们都知道Tomcat服务器是包括连接器和容器,​那他们内部具体是怎么实现的呢?今天让我们一起来学习一下~ 1、tomcat基础知识 2、tomcat和service的关系 3、tomcat的详细介绍(重点) 3.1、连接器 3.1.1、ProtocolHandler组件 3.1.2、…

Maven学习(一)————Maven技术概述

引言 在过去的项目开发中,存在很多实操性的痛点: 1、一个项目只通过一个巨大的java工程来开发,随着模块的增多,工程也变得异常庞大,不利于分工和管理。 2、过去需要的第三方 api 接口需要通过手动导包的形式&#x…

深入理解Tomcat和Jetty源码之第四篇tomcat系统架构上:容器是如何设计的

今天来介绍一下Tomcat的容器机制: 1、Tomcat的四种容器 2、容器示意图 3、责任链模式介绍 4、Tomcat如何确定请求是哪个Wrapper处理的 5、Tomcat的Context和servlet的ServletContext还有Spring的ApplicationContext有什么不同

Maven学习(二)————Maven核心概念(一)

引言 Maven 作为项目构建工具,学习成本并不大,但是如果搞不懂它的一些核心概念,使用起来还是不能特别得心应手。 Maven的核心概念包括以下这些: 1、约定的目录结构 2、POM 3、坐标 4、依赖 5、仓库 6、生命周期/插件/目…

Maven学习(三)————Maven核心概念(二)

引言 承接上一篇《Maven学习(二)————Maven核心概念(一)》,介绍 Maven 生命周期、插件、目标、继承、聚合等一些概念。 一、Maven 生命周期 1.1 理解 Maven 生命周期及主要构建过程 Maven 构建生命周期&#x…

Maven学习(四)————Eclipse 中的 Maven 工程

引言 创建一个 Maven 版 Hello World。 一、Eclipse 中 Maven 插件的准备工作 除了 JDK 和必须的 Eclipse 之外,还需要在 Eclipse 中设置Maven 相关的信息。这里有最重要的两项 maven 配置: 1.1 Maven Installations 说明:该项设置是指定…

数据结构与算法————稀疏数组

引言 数据压缩方面,我们往往可以通过稀疏数组来保存有效数据,节省存储空间。 一、稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组。 它是一个十分有效的存储结构,便于节…

Linux进阶之路————crond定时任务调度

引言 crond 的概念和 crontab 是不可分割的。crontab 是一个命令,而 crond 是Linux 下用来周期性执行某种任务或等待处理某些事件的守护进程,类似于 Windows 下的计划任务。 当装完操作系统之后,默认便会安装 crond 服务工具,并…

Linux进阶之路————Linux磁盘分区与挂载

引言 对于Linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录 / ,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分。 Linux采用一种叫“载入”的处理方法&#xff…

Maven学习(五)————依赖的特性辨析

引言 在Maven 中,依赖有一些特性必须我们掌握,如依赖的传递性。 一、依赖的传递性 其实依赖的传递性非常好理解。 上图,如果 Maven 项目 B 已经依赖了 C ,A 又依赖了 B,那么 A 不需要再在自己的pom 中重复引入 C 的…

解决pom文件第一行报错(unknown)-亲测有效

原文链接:https://blog.csdn.net/u010947534/article/details/93743582 问题: Eclipse导入maven项目时,或者新建一个springboot项目时,pom.xml文件第一行报错,没有错误信息提示,就一个Unknown&#xff0c…

Oracle中start with xx connect by prior 语句解析

Oracle中start with xx connect by prior 语句解析 ​ Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找到它所有的子节点或者父节点. ​ 现在有如下图的数据: 我们先想数据库插入数据,这里用到oracle的批量插入写法# 1 建表 CRE…

Java NIO ———— Buffer 缓冲区详解

引言 缓冲区是一个用于特定基本类型的容器。由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类。 Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互。数据从通道存入缓冲区,从缓冲区取出到通道中。 一、创建缓冲区 缓冲区的本质是 …

基本类型理解巩固及补码原理总结

引言 本篇文章属于计算机基础通识,主要讨论:有符号类型、无符号类型的区别,byte、int 等类型的取值范围,最大值最小值的计算公式的由来,原码、反码、补码转换公式。 有符号类型与无符号类型 在 Java 中的八大基本类…