最新100道大厂高频spring面试题附答案,请问面试官你还有要问的吗?

这里是由多位互联网大厂架构师面试整理的出现频率最高的spring相关面试题,并为你们整理了完整的答案,赶忙收藏起来吧!java

100道spring高频面试题

Spring概览

一、Spring是什么?

Spring是一个企业级Java开发框架。Spring框架的核心特性可用于开发任何Java应用程序,但也有一些扩展用于在Java EE平台上构建web应用程序。Spring框架的目标是经过基于POJO的模型,使Java EE开发更加简单。web

二、Spring框架的好处?

轻量级:Spring框架是轻量级的,最基础的版本大约只有2MB。面试

控制反转(IOC):经过控制反转技术,实现了解耦合。对象给出它们的依赖,而不是建立或查找依赖的对象。spring

面向切面(AOP):Spring支持面向切面的编程,并将应用程序业务逻辑与系统服务分离。数据库

MVC框架:Spring的WEB框架是一个设计良好的web MVC框架,它为web框架提供了一个很棒的替代方案。编程

容器:Spring包含并管理对象的生命周期和配置。json

事务管理:Spring提供了一个一致性的事务管理接口,能够收缩到本地事务,也能够扩展到全局事务(JTA)。设计模式

异常处理:Spring提供了方便的API来将具体技术的异常(由JDBC、Hibernate或JDO抛出)转换为一致的unchecked 异常。api

三、Spring有哪些模块?

Spring大约有20个模块,包括核心容器、Data Access/Integration、Web, AOP , Instrumentation 和Test。浏览器

⭐️Spring框架最核心的是Spring Core Container它包含如下模块:

Core

Bean

Context

Expression Language

⭐️Data Access/Integration,提供与数据库交互的支持。它包含如下模块:

JDBC

Object-Relational Mapping (ORM)

Java Messaging Service (JMS)

Object XML Mappers (OXM)

Transaction Management

⭐️Web,提供建立web应用程序的支持。它包含如下模块:

Web

Web-MVC

Web-Socket

Web-Portlet

⭐️Test,支持使用JUnit和TestNG进行测试。

⭐️Messaging,提供对STOMP的支持。它还支持用于路由和处理来自WebSocket客户端的STOMP消息的注释编程模型。

⭐️Aspects,提供与AspectJ集成的支持。

四、解释Core Container(Application context)模块

这是最基本的Spring模块,它提供Spring框架的基本功能。BeanFactory是任何基于spring的应用程序的核心。Spring框架是基于这个模块的,它构建了Spring容器。

五、BeanFactory实现实例

BeanFactory是工厂模式的实现,它使用控制反转来将程序的配置和依赖项与实际的业务代码分开。

六、XMLBeanFactory

最经常使用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根据XML文件的定义加载对应的bean。这个容器从XML文件中读取配置元数据,并使用它建立彻底配置化的应用程序。

七、解释AOP模块

AOP模块用于为支持Spring应用程序面向切面的开发。AOP联盟提供了不少支持,这样就确保了Spring和其余AOP框架的共通性。本模块还将元数据编程引入Spring。

八、解释JDBC抽象和DAO模块

使用JDBC抽象和DAO模块,咱们能够确保保持数据库代码的整洁和简单,并避免数据库资源关闭而致使的问题。它在多个数据库服务器给出的异常之上提供了一层统一的异常。它还利用Spring的AOP模块为Spring应用程序中的对象提供事务管理服务。

九、解释对象/关系映射集成模块

Spring还经过提供ORM模块,支持直接在JDBC上使用对象/关系映射(ORM)工具。Spring支持集成几个流行的ORM框架中,包括Hibernate、JDO和iBATIS SQL Maps。Spring的事务管理一样支持这些ORM框架和JDBC。

十、解释Spring web模块

Spring web模块基于applicationcontext模块,提供了一个适合基于web的应用程序的上下文。此模块还支持多种面向web的任务,例如隐式地处理文件上传请求,以及将请求参数编程绑定到业务对象。还包含与Jakarta Struts的集成。

十一、解释Spring MVC模块

Spring提供了MVC框架,用于构建web应用程序。Spring能够很简单与其余MVC框架集成,可是Spring的MVC框架是一个更好的选择,由于它使用IOC将控制层逻辑与业务对象彻底分离。使用Spring MVC,你能够声明性地将请求参数绑定到业务对象。

十二、Spring配置文件

Spring配置文件是一个XML文件。这个文件包含类信息,并说明这些类是如何配置和相互调用的。

1三、如何才能有多个Spring配置文件?

web.xml contextConfigLocation:你能够经过ContextConfigLocation元素将多个配置文件所有加载到Web应用程序上下文中。假设你正在编写一个web应用程序,已经有了主应用程序上下文。你只需在下一个上下文的声明之间留出一些空白。

applicationContext.xml导入resource:你能够添加你的主applicationContext.xml至web.xml文件,而后在主上下文中使用import语句。

1四、ApplicationContext有哪些常见实现?

FileSystemXmlApplicationContext容器从XML文件加载bean的定义。XML bean配置文件的完整路径必须提供给构造函数。

ClassPathXmlApplicationContext容器也从XML文件加载bean的定义。这里,你须要正确设置classpath由于这个容器将在classpath里找bean配置。

WebXmlApplicationContext容器从web应用程序中加载包含全部bean定义的XML文件。

1五、Bean Factory和ApplicationContext有什么区别?

Application contexts提供一种方法处理文本消息,一个一般的作法是加载文件资源(好比镜像),它们能够向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不禁bean工厂以程序化方式处理的操做,能够在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。

1六、Spring框架的一些最佳实践是什么?

可见 20 个Spring框架实践 ,

1七、使用Spring框架的方式有哪些?

能够这样使用Spring框架:

用于编写web应用程序

提供Restful服务

保护你的web应用程序

联通数据库

处理长时间运行的做业

处理你必需要用的外部资源和系统

用于测试

用于独立的java项目

将应用程序转换为可执行文件

将社交媒体集成到应用程序中

1八、咱们如何使用Spring建立restful web服务来返回JSON响应结果?

只要Jackson2在classpath中,SpringBoor程序中的任何Spring @RestController修饰的控制器默认都返回json格式结果。

1九、Spring vs Spring MVC vs Spring Boot?

Spring:Spring最重要的特性是依赖注入或控制反转。

Spring MVC :是一个彻底面向HTTP的MVC框架,由Spring框架管理并基于servlet。

SpringBoot:是一个用于快速配置的应用框架,它提供现成的配置,以便构建Spring应用。

20、一个Spring大概是什么样子?

接口:定义了一些方法的接口。

Bean类:它包含属性、setter和getter方法、其它方法等等。

Spring AOP:提供关注横切面的功能。

XML配置文件:包含类的信息以及如何配置它们。

客户程序:调用方法。

依赖注入

2一、Spring的IOC容器是什么?

Spring IOC负责建立对象,使用依赖注入(dependency injection,DI)管理它们,将对象集中起来,配置对象,管理对象的整个生命周期。

2二、IOC的好处有哪些?

IOC或依赖注入最小化应用程序代码量。

它使测试应用程序变得容易,由于单元测试中不须要单例或JNDI查找机制。

以最小的代价和最少的干扰来促进松耦合。

IOC容器支持快速实例化和懒加载。

2三、Spirng中有多少种IOC容器?

BeanFactory:BeanFactory本质上只不过是高层级的工厂接口,它可以维护不一样bean及其依赖项的注册表。BeanFactory使你可以读取bean定义并使用bean工厂调用它们。

ApplicationContext:ApplicationContext是Spring应用程序中的核心接口,用于向应用程序提供配置信息。它在运行时是只读的,但若是须要而且应用支持的话,能够从新加载。许多类实现了ApplicationContext接口,容许多种配置项和应用类型。

2四、BeanFactory和ApplicationContext比较

Application Context:

Bean实例化/装配

BeanPostProcessor自动注册

BeanFactoryPostProcessor自动注册

方便的消息源访问(针对i18n)

ApplicationEvent发布

BeanFactory:

Bean实例化/装配

2五、什么是Spring中的依赖注入?

依赖注入是控制反转(IOC)的一个方面,是一个通用的概念,它有不少种表达的方式。这个概念意思你不建立你的对象,但描述他们应该如何建立。你不会在代码中直接将组件和服务耦合在一块儿,而是描述配置文件中的哪些组件须要哪些服务。而后由一个容器(IOC容器)负责将它们关联起来。

2六、紧耦合和松耦合有什么区别?

紧耦合:

紧密耦合是指类之间高度依赖。

松耦合:

松耦合是经过促进单一职责和关注点分离的设计来实现的。

2七、IOC(依赖注入)有哪些不一样类型?

构造方法注入:基于构造方法的依赖注入是在容器调用一个带有多个参数的类构造方法时完成的,每一个参数都表示对其余类的依赖。

Setter注入:Setter注入是由容器在调用无参数构造方法或无参数静态工厂方法实例化Bean后调用Bean的Setter方法来实现的。

2八、你建议使用构造方法注入仍是Setter注入?

能够同时使用构造方法注入和Setter注入。最好的解决方案是对强制依赖项使用构造方法注入,对可选依赖项使用setter方法注入。

Spring Beans

2九、Spring beans是什么?

Spring bean是构成Spring应用程序主干的Java对象。它们由springioc容器实例化、组装和管理。这些bean是使用提供给容器的配置元数据建立的,例如,XML中形式定义。

spring框架中定义的bean是单例bean。bean标记中有一个名为“singleton”的属性,若是指定为true,则bean为单例;若是设置为false,则bean将成为prototype bean。默认设置为true。因此,spring框架中的全部bean默认都是单例bean。

30、Spring bean定义包含什么?

Spring bean的定义包含容器如何建立Bean、其生命周期及其依赖关系所需的全部配置元数据。

3一、如何向Spring容器提供配置元数据?

向Spring容器提供配置元数据有三种重要方法:

基于XML的配置文件

基于注解的配置

基于Java的配置

3二、怎么定义bean的做用域?

在Spring中定义时,咱们还能够为bean声明一个做用域。它能够经过bean定义中的scope属性来定义。例如,当Spring每次须要生成一个新的bean实例时,这个bean的scope属性就是prototype。另外一方面,当Spring每次须要时都必须返回同一个bean实例时,bean scope属性必须设置为singleton。

3三、说明Sprig支持的bean做用域

singleton:Spring将bean定义的范围限定为每一个Spring IOC容器只有一个单实例。

prototype:单个bean定义有任意数量的对象实例。

request:做用域为一次http请求,该做用域仅在基于web的Spring ApplicationContext情形下有效。

session:做用域为HTTP Session,该做用域仅在基于web的Spring ApplicationContext情形下有效。

global-session:做用域为全局的HTTP session。该做用域也是仅在基于web的Spring ApplicationContext情形下有效。

默认的做用域是singleton。

3四、单例做用域是线程安全的吗?

不,单例bean在Spring框架中不是线程安全的。

3五、解释Spring Bean的声明周期

Spring容器 从XML 文件中读取bean的定义,并实例化bean。

Spring填充bean定义(DI)中指定的全部属性。

若是bean实现了BeanNameAware接口,spring会将bean的id传递给setBeanName()方法。

若是有任何BeanBeanPostProcessor与该bean关联,Spring将调用postProcesserBeforeInitialization()方法。

若是bean实现了IntializingBean,则调用其afterPropertySet()方法。若是bean声明了init方法,则调用指定的init方法。

若是有任何与bean关联的beanPostProcessor,则将调用它们的postProcessAfterInitialization()方法。

若是bean实现l了DisposableBean,它将调用destroy()方法。

3六、有哪些重要的bean生命周期方法?你能重写它们吗?

有两个重要的生命周期方法。

第一个是setup,当bean加载到容器中时调用它。第二个方法是teardown方法,当bean从容器中卸载时调用该方法。

bean标签有两个重要的属性(init-method和destroy-method),能够用它们定义本身的自定义初始化和销毁方法。还有相应的注解(@PostConstruct和@PreDestroy)。

3七、Spring的内部bean是什么?

当一个bean仅被用做另外一个bean的属性时,它能被声明为一个内部bean,为了定义内部bean,在Spring 的 基于XML的 配置元数据中,能够在 < property/ >或 < constructor-arg/ > 元素内使用< bean/ > 元素,内部bean一般是匿名的,它们的做用域通常是prototype。

3八、如何在Spring中注入Java集合?

Spring提供如下几种集合的配置元素:

类型用于注入一列值,容许有相同的值。

类型用于注入一组值,不容许有相同的值。

类型用于注入一组键值对,键和值均可觉得任意类型。

类型用于注入一组键值对,键和值都只能为String类型。

3九、什么是Spring Bean装配?

装配,或bean 装配是指在Spring 容器中把bean组装到一块儿,前提是容器须要知道bean的依赖关系,如何经过依赖注入来把它们装配到一块儿。

40、什么是Bean自动装配?

Spring 容器可以自动装配 自动关联 的bean,这意味着,经过检查BeanFactory的内容,而不使用

4一、解释不一样类型的自动装配

自动装配有五种模式,可用于指示Spring容器使用autowiring进行依赖注入:

no:默认的方式是不进行自动装配,经过显式设置ref 属性来进行装配。

byName:经过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,以后容器试图匹配、装配和该bean的属性具备相同名字的bean。

byType:过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,以后容器试图匹配、装配和该bean的属性具备相同类型的bean。若是有多个bean符合条件,则抛出异常。

constructor:这个方式相似于byType, 可是要提供构造器参数,若是没有肯定的带参数的构造器参数类型,将会抛出异常。

autodetect:首先尝试使用constructor来自动装配,若是不行,则使用byType方式。

4二、自动注入有限制吗?

自动注入的限制:

重写: 你仍能够用 < constructor-arg >和 < property > 配置来定义依赖,这些配置将始终覆盖自动注入。

基本数据类型:不能自动装配简单的属性,如基本数据类型、字符串和类。

模糊特性:自动装配不如显式装配精确,若是有可能尽可能使用显示装配。

4三、你能在Spring中注入null和空字符串吗?

是的,能够。

Spring注解

4四、有哪些重要的Spring注解?

我在项目中使用的一些Spring注解:

@Component:用于指示类是组件。这些类用于自动注入,并在使用基于注解的配置时配置为bean。

@Controller:是一种特定类型的组件,用于MVC应用程序,主要与@RequestMapping注解一块儿使用。

@Repository:用于表示组件用做存储库和存储/检索/搜索数据的操做。咱们能够将此注解应用于DAO实现类。

@Service:用于指示类是服务层。

@Required:此注解简单地说明做用的bean属性必须在配置时经过bean定义中的显式属性值或经过自动注入填充。若是做用的bean属性未填充,容器将抛出BeanInitializationException。

@ResponseBody:用于将对象做为response,一般用于将XML或JSON数据做为response发送。

@PathVariable:用于将动态值从URI映射处处理方法参数。

@Autowired:对自动注入的位置和方式提供了更细粒度的控制。它能够用于在setter方法上自动注入bean。就像@Required 注解同样,修饰setter方法、构造器、属性或者具备任意名称和/或多个参数的PN方法。

@Qualifier:当有多个相同类型的bean而且只须要将一个bean自动注入时,@Qualifier注解与@Autowired注释一块儿使用,经过指定将链接哪一个bean来消除歧义。

@Scope:配置Spring bean的做用域。

@Configuration:表示Spring IOC容器能够将该类用做bean定义的源。

@ComponentScan:应用此注解时,将扫描包下的全部可用类。

@Bean:对于基于java的配置,用@Bean注解修饰的方法将返回一个在Spring应用程序上下文中注册为Bean的对象。

用于配置切面和通知、@Aspect、@Before、@After、@Around、@Pointcut等的AspectJ注解。

4五、@RequestParam注解的做用是什么?

spring中的@RequestParam注解将查询字符串的参数值绑定到控制器的方法参数。

4六、注解@Primary的重要性

当有多个相同数据类型的bean时,开发人员Spring的@Primary注解,它会自动为特定bean提供更高的优先级。这个注解能够用在任何直接或间接用@Component注解修饰的类上,也能够用在用@Bean注解修饰的方法上。

4七、XML配置和注解之间有什么区别?

注解的优势:

全部信息都在一个文件中

当类更改了,不用修改xml配置文件

xml配置的优势:

POJO及其行为之间更清晰地分离

当你不知道哪一个POJO负责该行为时,更容易找到该POJO

4八、@SpringBootApplication的做用是什么?

@SpringBootApplication 注解是在springboot1.2.0中引入的,它支持自动配置特性。

此批注封装了三种不一样注解的做用:

@Configuration:容许开发人员显式地注册bean

@ComponentScan:启用组件扫描,这样控制器类和其余组件将被自动发现并注册为Spring应用程序上下文中的bean

@EnableAutoConfiguration:启动SpringBoot的自动配置特性

此注解可使用如下可选参数:

exclude:从自动配置中排除的类列表

excludeNames:从自动配置中排除彻底限定类名的列表

scanBasePackage:其中提供了扫描程序包的列表

scanBasePackageClasses:提供必须应用于扫描的其余包中的类的列表

4九、解释@InitBinder?

此注解修饰在声明日期格式的方法上,而且在整个类中,使用定义的日期格式。每当绑定做用在日期字段@InitBinder注解中时,说明使用CustomDateEditor,而CustomDateEditor则使用@InitBinder中声明的日期格式。

50、定义@ControllerAdvice

有@ControllerAdvice注解的类能够显式声明为Spring bean,或者经过类路径扫描自动注入。全部这样的bean都是经过AnnotationAwareOrderComparator排序的,即基于@Order和Ordered,并在运行时按该顺序调用。对于处理异常,将使用匹配的异常处理程序方法在第一个通知上选择一个@ExceptionHandler。对于模型属性和InitBinder初始化,@ModelAttribute和@InitBinder方法也将遵循@ControllerAdvice顺序。

5一、咱们能够将一个个对象做为控制器处理程序方法的响应吗?

是的,咱们可使用@ResponseBody注解在restful web服务中发送基于JSON或XML的响应。

5二、解释@ModelAttribute?

@ModelAttribute注解引用模型对象的属性,用于准备模型数据。此注解将方法变量或模型对象绑定到命名的模型属性。此注解接受一个可选值,该值表示模型属性的名称。@ModelAttribute注解能够在参数级别或方法级别使用。在参数级别使用此注解是为了接受请求表单值,而在方法级别则是将默认值分配给模型。

5三、@RequestMapping注解

@RequestMapping注解用于将web请求映射处处理程序类(即控制器)或处理程序方法上,它能够在方法级或类级使用。若是开发人员在类级别使用@RequestMapping注释,它将做为方法级路径的相对路径。

5四、什么是spring中基于java的配置?给出一注解示例

基于Java的配置选项使你可以在不使用XML的状况下编写大多数Spring配置,可是须要一些基于Java的注释的帮助。

一个例子是@Configuration注释,它表示spring IOC容器能够将该类用做bean定义的源。另外一个例子是@Bean注解的方法,该方法将返回一个对象,该对象应在Spring应用程序上下文中注册为bean。

5五、什么是基于注解的容器配置?

XML配置以外的另外一种选择是基于注解的配置,它依赖字节码元数据来装配组件,而不是尖括号声明。开发人员不使用XML来描述bean装配,而是经过在相关的类、方法或字段声明上使用注解将配置移动到组件类中。

5六、如何打开注解装配?

默认状况下,Spring容器中的注解装配不会打开。为了使用基于注解的装配,咱们必须在Spring配置文件中配置context:annotation-config/ 元素。

Spring 数据访问

5七、Spring JDBC API中有哪些类?

JdbcTemplate

SimpleJdbcTemplate

NamedParameterJdbcTemplate

SimpleJdbcInsert

SimpleJdbcCall

5八、如何在Spring框架中更高效地使用JDBC?

使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。因此开发者只需写statements 和 queries从数据存取数据,JDBC也能够在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate 。

5九、JdbcTemplate

JdbcTemplate 类提供了不少便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操做语句,提供自定义的数据错误处理。

60、如何经过spring JdbcTemplate获取数据?

有两个接口可用于从数据库中获取数据:

ResultSetExtractor

RowMapper

6一、NamedParameterJdbcTemplate的优势是什么?

NamedParameterJdbcTemplate是基于spring提供的JDBCTemplate构建的,用于与数据库的底层交互。它能够将SQL查询参数做为键值对传递。所以,与索引或“?”相比,程序代码的可读性要高得多,所以能够做为更好的标识“?“”占位符方法。特别是在参数数目庞大的状况下,后者更难跟踪。

6二、什么是SpringJDBCTemplate类以及如何使用它?

JdbcTemplate类执行SQL查询、update语句和存储过程调用,对结果集执行迭代,并提取返回的参数值。它隐式处理资源的建立和释放,从而避免诸如忘记关闭链接之类的错误。它还捕获JDBC异常并进行包装。

6三、 JDBC和Spring JDBC有什么区别?

Spring JDBC在JDBC的顶层提供数据操做:

一、定义链接参数

二、打开链接

三、指定语句

四、准备并执行语句

五、设置循环以迭代结果(若是有)

六、操做每一个迭代

七、处理任何异常

八、处理事务

九、关闭链接

6四、Spring DAO支持

Spring中对数据访问对象(DAO)的支持目的令人们更容易以一致的方式使用JDBC、Hibernate或JDO等数据访问技术。这使咱们能够至关容易地在持久性技术之间切换,也能够没必要担忧捕捉每种技术特有的异常。

6五、使用Spring访问Hibernate有哪些方式?

有两种方式使用Spirng访问Hibernate。

使用Hibernate模板和回调进行控制反转。

扩展HibernateDAOSupport并应用AOP拦截器节点。

6六、Spring支持的ORM

Spring支持下面的ORM:

Hibernate

iBatis

JPA(Java持久化API)

TopLink

JDO (Java Data Objects)

OJB

6七、如何使用HibernateDaoSupport集成Spring和Hibernate?

用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:

配置the Hibernate SessionFactory

继承HibernateDaoSupport实现一个DAO

在AOP支持的事务中装配

6八、Spring支持的事务管理类型?

编程式事务管理: 这意味你经过编程的方式管理事务,给你很大的灵活性,可是难维护。

声明式事务管理: 这意味着你能够将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

6九、Spring框架的事务管理有哪些优势?

它提供了跨不一样事务api(如JTA、JDBC、Hibernate、JPA和JDO)的一致编程模型。

它为编程事务管理提供了比JTA等许多复琐事务API更简单的API。

它支持声明式事务管理。

它很好地集成了Spring的各类数据访问抽象。

70、哪一种事务管理类型更可取?

大多数Spring框架的用户选择声明式事务管理,由于它对应用代码的影响最小,所以更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式容许你经过代码控制事务)少了一点灵活性。

Spring AOP

7一、解释AOP

面向切面编程,或AOP, 是一种编程技术,容许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。

7二、AOP有哪些优势?

a.它是非侵入性的

你的service/domain类被切面通知,而无需在service/domain类中添加任何与spring aop相关的类或接口。

容许开发人员专一于业务代码,而不是切点。

b.它是用纯Java实现的

不须要特殊的编译单元或特殊的类加载器

c.它使用Spring的IOC进行依赖注入

切面能够配置为普通的spring bean。

d.与任何其余AOP框架同样,它将横切关注点编织到类中,而不从这些类中调用横切关注点。

e.集中或模块化横切关注点

易于维护和更改切面

改变须要在一处进行。

在你不但愿有的类中有日志记录,能够经过修改相应切面(日志切面)中的切入点来轻松实现。因此你只须要在一个地方作出改变。

f.用于使用基于模式(XML配置)或@AspectJ基于注解的方式建立切面。

g.易于配置

7三、AOP有哪些实现?

AOP实现:

Spring AOP:

经过动态代理实现

它只支持方法级切入点

它是基于DTD的

Apache AspectJ:

经过aspectj java工具实现编译时编织,是经过静态代理实现的

它支持字段级切入点

它是基于模式和注解配置的

7四、AOP术语有哪些?

切面

通知

切点

链接点

引入

目标对象

AOP代理

织入

7五、切面

AOP的核心结构是切面,它将影响多个类的行为封装到可重用的模块中。提供了一组跨领域需求的ia模块。例如,一个日志模块将被称为AOP切面进行日志记录。根据需求,应用程序能够有任意数量的切面。在spring aop中,切面是使用带有@Aspect注释(@AspectJ样式)注解的常规类来实现的。

7六、链接点

链接点表明一个应用程序的某个位置,在这个位置咱们能够插入一个AOP切面,它其实是个应用程序执行Spring AOP的位置。

7七、通知

通知是个在方法执行前或执行后要作的动做,其实是程序执行时要经过SpringAOP框架触发的代码段。

Spring切面能够应用五种类型的通知:

before: 前置通知,在一个方法执行前被调用

after: 在方法执行以后调用的通知,不管方法执行是否成功

after-returning: 仅当方法成功完成后执行的通知

after-throwing: 在方法抛出异常退出时执行的通知

around: 在方法执行以前和以后调用的通知

7八、切点

切入点是一个或一组链接点,通知将在这些位置执行。能够经过表达式或匹配的方式指明切入点。

7九、什么是引入?

引入容许咱们在已存在的类中增长新的方法和属性。

80、什么是目标对象?

目标对象是由一个或多个切面通知的对象。它将始终是一个代理对象。它也被称为通知(advised)对象。

8一、什么是代理?

代理是通知目标对象后建立的对象。从客户端的角度看,代理对象和目标对象是同样的。

8二、有哪些不一样类型的代理?

BeanNameAutoProxyCreator

DefaultAdvisorAutoProxyCreator

Metadata autoproxying

8三、什么是织入。什么是织入应用的不一样点?

织入是将切面和到其余应用类型或对象链接或建立一个被通知对象的过程。

织入能够在编译时,加载时,或运行时完成。

8四、Spring AOP中关注点和横切关注点有什么区别?

关注点是咱们但愿在应用程序的模块中拥有的行为。关注点能够定义为咱们想要实现的功能。

横切关注点是一个在整个应用程序中都适用的关注点,它会影响整个应用程序。例如,日志记录、安全性和数据传输是应用程序中几乎每一个模块都须要的关注点,所以它们是横切关注点。

8五、解释基于XML Schema方式的切面实现

在这种状况下,切面由常规类以及基于XML的配置实现。

8六、解释基于注解的切面实现

在这种状况下(基于@AspectJ的实现),涉及到的切面声明的风格与带有java5标注的普通java类一致。

G.Spring Model View Controller (MVC)

8七、什么是Spring MVC框架?

Spring 配备构建Web 应用的全功能MVC框架。Spring能够很便捷地和其余MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也容许以声明的方式把请求参数和业务对象绑定。

8八、建立spring mvc应用程序所需的最少配置是什么?

为了建立一个简单的Spring MVC应用程序,咱们须要作如下工做:

在项目中添加spring上下文和spring-webmvc依赖。在web.xml中配置DispatcherServlet来经过spring容器处理请求。

定义bean的spring bean配置文件,若是使用注解,那么必须在这里配置它。咱们还须要为视图页面配置视图解析器。

定义用于处理客户端请求的请求映射的控制器类。

8九、说出Spring MVC请求处理的主要流程?

浏览器向DispatcherServlet发送请求

DispatcherServlet获取HanderMapping并找到适当的控制器

控制器执行请求并将数据放入模型中,并将视图名称返回给DispatcherServlet。

DispatcherServlet经过视图名称和ViewResolver映射到对应的视图。

90、DispatcherServlet

Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理全部的HTTP请求和响应。

9一、WebApplicationContext

WebApplicationContext 继承了ApplicationContext 并增长了一些WEB应用必备的特有功能,它不一样于通常的ApplicationContext ,由于它能处理主题,并找到被关联的servlet。

9二、 Spring MVC中的控制器是什么?

控制器提供一个访问应用程序的行为,此行为一般经过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个很是抽象的方式实现了一个控制层,容许用户建立多种用途的控制器。

9三、你如何将spring mvc框架与MVC架构联系起来?

SpringMVC框架:

Spring框架是一个开源的web应用程序框架和Java平台的控制反转容器。

MVC架构:

MVC(Model-View-Controller,简称MVC)是一种用于开发web应用程序的软件设计模式.

9四、Spring MVC中的ViewResolver是什么?

Spring提供了ViewResolver,它使你可以在浏览器中渲染模型,而无需将绑定到特定的视图技术。例如,Spring容许您使用jsp、Velocity模板和XSLT视图。对Spring处理视图的方式很重要的两个接口是ViewResolver和View。ViewResolver提供视图名称和实际视图之间的映射。View接口处理请求的准备工做,并将请求移交给某一个视图技术。

9五、MultipartResolver是什么?怎么使用?

spring mvc经过MultipartResolver提供多请求支持。MultipartResolver解析入站多请求。你能够经过在DispatcherServlet应用程序上下文中注册MultipartResolver bean来启用多请求支持。

9六、如何在spring mvc应用程序中上传文件?

Spring为经过MultipartResolver接口为上传文件提供了内置支持。该字段还有一个验证器,用于检查上载的文件的大小是否大于零。最后只须要一个简单的视图,其中包含一个带有上载文件选项的表单。

9七、Spring Web MVC怎么校验数据?

这里有三种方式去 提供校验 :使用注解、手动校验、或者二者混合。

9八、什么是springmvc拦截器以及如何使用它?

Spring的处理程序映射机制包括处理程序拦截器,当你但愿将特定功能应用于某些请求时,例如,检查用户主题时,这些拦截器很是有用。拦截器必须实现org.springframework.web.servlet包的HandlerInterceptor。此接口定义了三种方法:

preHandle:在执行实际处理程序以前调用。

postHandle:在执行完实际程序以后调用。

afterCompletion:在完成请求后调用。

扩展

9九、Spring Security是什么?

Spring security 是Spring框架中最重要的模块之一。它使开发人员可以以一种可管理的方式轻松地集成安全特性。在下面的示例中,咱们将展现如何在springmvc应用程序中实现Spring安全性。

100、为何要用SpringBoot?

如下是使用SpringBoot的一些好处:

自动配置,使用基于类路径和应用程序上下文的智能默认值,固然也能够根据须要重写它们以知足开发人员的需求。

建立Spring Boot Starter 项目时,能够选择选择须要的功能,Spring Boot将为你管理依赖关系。

SpringBoot项目能够打包成jar文件。可使用Java-jar命令从命令行将应用程序做为独立的Java应用程序运行。

在开发web应用程序时,springboot会配置一个嵌入式Tomcat服务器,以便它能够做为独立的应用程序运行。(Tomcat是默认的,固然你也能够配置Jetty或Undertow)

SpringBoot包括许多有用的非功能特性(例如安全和健康检查)。
在这里插入图片描述

以上就是从各个大厂整理的最新Spring面试题了,若是对您有帮助记得点赞+收藏哦,感谢您的支持!