100个高频Spring面试题
A:Spring概览1、Spring是什么?Spring是一个企业级Java开发框架。Spring框架的核心特性可用于开发任何Java应用程序,但也有一些扩展用于在Java EE平台上构建web应用程序。Spring框架的目标是通过基于POJO的模型,使Java EE开发更加简单。 2、Spring框架的好处?
3、Spring有哪些模块?Spring大约有20个模块,包括核心容器、Data Access/Integration、Web,AOP,Instrumentation 和Test。 ?Spring框架最核心的是Spring Core Container它包含以下模块:
?Data Access/Integration,提供与数据库交互的支持。它包含以下模块:
?Web,提供创建web应用程序的支持。它包含以下模块:
?Test,支持使用JUnit和TestNG进行测试。 ?Messaging,提供对STOMP的支持。它还支持用于路由和处理来自WebSocket客户端的STOMP消息的注释编程模型。 ?Aspects,提供与AspectJ集成的支持。 4、解释Core Container(Application context)模块这是最基本的Spring模块,它提供Spring框架的基本功能。beanfactory是任何基于spring的应用程序的核心。Spring框架是基于这个模块的,它构建了Spring容器。 5、beanfactory实现实例beanfactory是工厂模式的实现,它使用控制反转来将程序的配置和依赖项与实际的业务代码分开。 6、XMLbeanfactory最常用的是org.springframework.beans.factory.xml.Xmlbeanfactory,它根据XML文件的定义加载对应的bean。这个容器从XML文件中读取配置元数据,并使用它创建完全配置化的应用程序。 7、解释AOP模块AOP模块用于为支持Spring应用程序面向切面的开发。AOP联盟提供了很多支持,这样就确保了Spring和其他AOP框架的共通性。本模块还将元数据编程引入Spring。 8、解释JDBC抽象和DAO模块使用JDBC抽象和DAO模块,我们可以确保保持数据库代码的整洁和简单,并避免数据库资源关闭而导致的问题。它在多个数据库服务器给出的异常之上提供了一层统一的异常。它还利用Spring的AOP模块为Spring应用程序中的对象提供事务管理服务。 9、解释对象/关系映射集成模块Spring还通过提供ORM模块,支持直接在JDBC上使用对象/关系映射(ORM)工具。Spring支持集成几个流行的ORM框架中,包括Hibernate、JDO和iBATIS sql Maps。Spring的事务管理同样支持这些ORM框架和JDBC。 10、解释Spring web模块Spring web模块基于applicationcontext模块,提供了一个适合基于web的应用程序的上下文。此模块还支持多种面向web的任务,例如隐式地处理文件上传请求,以及将请求参数编程绑定到业务对象。还包含与Jakarta Struts的集成。 11、解释Spring MVC模块Spring提供了MVC框架,用于构建web应用程序。Spring可以很简单与其他MVC框架集成,但是Spring的MVC框架是一个更好的选择,因为它使用IOC将控制层逻辑与业务对象完全分离。使用Spring MVC,你可以声明性地将请求参数绑定到业务对象。 12、Spring配置文件Spring配置文件是一个XML文件。这个文件包含类信息,并说明这些类是如何配置和相互调用的。 13、如何才能有多个Spring配置文件?
14、ApplicationContext有哪些常见实现?
15、Bean Factory和ApplicationContext有什么区别?Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。 16、Spring框架的一些最佳实践是什么?可见20 个Spring框架实践, 17、使用Spring框架的方式有哪些?可以这样使用Spring框架:
18、我们如何使用Spring创建restful web服务来返回JSON响应结果?只要Jackson2在classpath中,SpringBoor程序中的任何Spring @RestController修饰的控制器默认都返回json格式结果。 19、Spring vs Spring MVC vs Spring Boot?
20、一个Spring大概是什么样子?
B:依赖注入21、Spring的IOC容器是什么?Spring IOC负责创建对象,使用依赖注入(dependency injection,DI)管理它们,将对象集中起来,配置对象,管理对象的整个生命周期。 22、IOC的好处有哪些?
23、Spirng中有多少种IOC容器?
24、beanfactory和ApplicationContext比较Application Context:
beanfactory:
25、什么是Spring中的依赖注入?依赖注入是控制反转(IOC)的一个方面,是一个通用的概念,它有很多种表达的方式。这个概念意思你不创建你的对象,但描述他们应该如何创建。你不会在代码中直接将组件和服务耦合在一起,而是描述配置文件中的哪些组件需要哪些服务。然后由一个容器(IOC容器)负责将它们关联起来。 26、紧耦合和松耦合有什么区别?紧耦合:
松耦合:
27、IOC(依赖注入)有哪些不同类型?
28、你建议使用构造方法注入还是Setter注入?可以同时使用构造方法注入和Setter注入。最好的解决方案是对强制依赖项使用构造方法注入,对可选依赖项使用setter方法注入。 C.Spring Beans29、Spring beans是什么?Spring bean是构成Spring应用程序主干的Java对象。它们由springioc容器实例化、组装和管理。这些bean是使用提供给容器的配置元数据创建的,例如,XML中<bean/>形式定义。 spring框架中定义的bean是单例bean。bean标记中有一个名为“singleton”的属性,如果指定为true,则bean为单例;如果设置为false,则bean将成为prototype bean。默认设置为true。所以,spring框架中的所有bean默认都是单例bean。 30、Spring bean定义包含什么?Spring bean的定义包含容器如何创建Bean、其生命周期及其依赖关系所需的所有配置元数据。 31、如何向Spring容器提供配置元数据?向Spring容器提供配置元数据有三种重要方法:
32、怎么定义bean的作用域?在Spring中定义<bean>时,我们还可以为bean声明一个作用域。它可以通过bean定义中的scope属性来定义。例如,当Spring每次需要生成一个新的bean实例时,这个bean的scope属性就是prototype。另一方面,当Spring每次需要时都必须返回同一个bean实例时,bean scope属性必须设置为singleton。 33、说明Sprig支持的bean作用域
默认的作用域是singleton。 34、单例作用域是线程安全的吗?不,单例bean在Spring框架中不是线程安全的。 35、解释Spring Bean的声明周期
36、有哪些重要的bean生命周期方法?你能重写它们吗?有两个重要的生命周期方法。 第一个是setup,当bean加载到容器中时调用它。第二个方法是teardown方法,当bean从容器中卸载时调用该方法。 bean标签有两个重要的属性(init-method和destroy-method),可以用它们定义自己的自定义初始化和销毁方法。还有相应的注解(@PostConstruct和@PreDestroy)。 37、Spring的内部bean是什么?当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义内部bean,在Spring 的 基于XML的 配置元数据中,可以在 < property/ >或 < constructor-arg/ > 元素内使用< bean/ > 元素,内部bean通常是匿名的,它们的作用域一般是prototype。 38、如何在Spring中注入Java集合?Spring提供以下几种集合的配置元素:
39、什么是Spring Bean装配?装配,或bean 装配是指在Spring 容器中把bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起。 40、什么是Bean自动装配?Spring 容器能够自动装配自动关联的bean,这意味着,通过检查beanfactory的内容,而不使用<constructor arg>和<property>元素,能通过Bean工厂自动处理bean之间的协作。 41、解释不同类型的自动装配自动装配有五种模式,可用于指示Spring容器使用autowiring进行依赖注入:
42、自动注入有限制吗?自动注入的限制:
43、你能在Spring中注入null和空字符串吗?是的,可以。 D.Spring注解44、有哪些重要的Spring注解?我在项目中使用的一些Spring注解:
45、@RequestParam注解的作用是什么?spring中的@RequestParam注解将查询字符串的参数值绑定到控制器的方法参数。 46、注解@Primary的重要性当有多个相同数据类型的bean时,开发人员Spring的@Primary注解,它会自动为特定bean提供更高的优先级。这个注解可以用在任何直接或间接用@Component注解修饰的类上,也可以用在用@Bean注解修饰的方法上。 47、XML配置和注解之间有什么区别?注解的优点:
xml配置的优点:
48、@SpringBootApplication的作用是什么?@SpringBootApplication注解是在springboot1.2.0中引入的,它支持自动配置特性。 此批注封装了三种不同注解的作用:
此注解可以使用以下可选参数:
49、解释@InitBinder?此注解修饰在声明日期格式的方法上,并且在整个类中,使用定义的日期格式。每当绑定作用在日期字段@InitBinder注解中时,说明使用CustomDateEditor,而CustomDateEditor则使用@InitBinder中声明的日期格式。 50、定义@ControllerAdvice有@ControllerAdvice注解的类可以显式声明为Spring bean,或者通过类路径扫描自动注入。所有这样的bean都是通过AnnotationAwareOrderComparator排序的,即基于@Order和Ordered,并在运行时按该顺序调用。对于处理异常,将使用匹配的异常处理程序方法在第一个通知上选择一个@ExceptionHandler。对于模型属性和InitBinder初始化,@modelattribute和@InitBinder方法也将遵循@ControllerAdvice顺序。 51、我们可以将一个个对象作为控制器处理程序方法的响应吗?是的,我们可以使用@ResponseBody注解在restful web服务中发送基于JSON或XML的响应。 52、解释@modelattribute?@modelattribute注解引用模型对象的属性,用于准备模型数据。此注解将方法变量或模型对象绑定到命名的模型属性。此注解接受一个可选值,该值表示模型属性的名称。@modelattribute注解可以在参数级别或方法级别使用。在参数级别使用此注解是为了接受请求表单值,而在方法级别则是将默认值分配给模型。 53、@RequestMapping注解@RequestMapping注解用于将web请求映射到处理程序类(即控制器)或处理程序方法上,它可以在方法级或类级使用。如果开发人员在类级别使用@RequestMapping注释,它将作为方法级路径的相对路径。 54、什么是spring中基于java的配置?给出一注解示例基于Java的配置选项使你能够在不使用XML的情况下编写大多数Spring配置,但是需要一些基于Java的注释的帮助。 一个例子是@Configuration注释,它表示spring IOC容器可以将该类用作bean定义的源。另一个例子是@Bean注解的方法,该方法将返回一个对象,该对象应在Spring应用程序上下文中注册为bean。 55、什么是基于注解的容器配置?XML配置之外的另一种选择是基于注解的配置,它依赖字节码元数据来装配组件,而不是尖括号声明。开发人员不使用XML来描述bean装配,而是通过在相关的类、方法或字段声明上使用注解将配置移动到组件类中。 56、如何打开注解装配?默认情况下,Spring容器中的注解装配不会打开。为了使用基于注解的装配,我们必须在Spring配置文件中配置<context:annotation-config/> 元素。 E.Spring 数据访问57、Spring JDBC API中有哪些类?
58、如何在Spring框架中更高效地使用JDBC?使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate 。 59、JdbcTemplateJdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。 60、如何通过spring JdbcTemplate获取数据?有两个接口可用于从数据库中获取数据:
61、NamedParameterJdbcTemplate的优点是什么?NamedParameterJdbcTemplate是基于spring提供的JDBCTemplate构建的,用于与数据库的底层交互。它可以将SQL查询参数作为键值对传递。因此,与索引或“?”相比,程序代码的可读性要高得多,因此可以作为更好的标识“?“”占位符方法。特别是在参数数目庞大的情况下,后者更难跟踪。 62、什么是SpringJDBCTemplate类以及如何使用它?JdbcTemplate类执行SQL查询、update语句和存储过程调用,对结果集执行迭代,并提取返回的参数值。它隐式处理资源的创建和释放,从而避免诸如忘记关闭连接之类的错误。它还捕获JDBC异常并进行包装。 63、 JDBC和Spring JDBC有什么区别?Spring JDBC在JDBC的顶层提供数据操作: 1、定义连接参数 64、Spring DAO支持Spring中对数据访问对象(DAO)的支持目的使人们更容易以一致的方式使用JDBC、Hibernate或JDO等数据访问技术。这使我们可以相当容易地在持久性技术之间切换,也可以不必担心捕捉每种技术特有的异常。 65、使用Spring访问Hibernate有哪些方式?有两种方式使用Spirng访问Hibernate。
66、Spring支持的ORMSpring支持下面的ORM:
67、如何使用HibernateDaoSupport集成Spring和Hibernate?用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:
68、Spring支持的事务管理类型?
69、Spring框架的事务管理有哪些优点?
70、哪种事务管理类型更可取?大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。 F:Spring AOP71、解释AOP面向切面编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。 72、AOP有哪些优点?a.它是非侵入性的
b.它是用纯Java实现的
c.它使用Spring的IOC进行依赖注入
d.与任何其他AOP框架一样,它将横切关注点编织到类中,而不从这些类中调用横切关注点。 e.集中或模块化横切关注点
f.用于使用基于模式(XML配置)或@AspectJ基于注解的方式创建切面。 g.易于配置 73、AOP有哪些实现?AOP实现: Spring AOP:
Apache AspectJ:
74、AOP术语有哪些?
75、切面AOP的核心结构是切面,它将影响多个类的行为封装到可重用的模块中。提供了一组跨领域需求的ia模块。例如,一个日志模块将被称为AOP切面进行日志记录。根据需求,应用程序可以有任意数量的切面。在spring aop中,切面是使用带有@Aspect注释(@AspectJ样式)注解的常规类来实现的。 76、连接点连接点代表一个应用程序的某个位置,在这个位置我们可以插入一个AOP切面,它实际上是个应用程序执行Spring AOP的位置。 77、通知通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。 Spring切面可以应用五种类型的通知:
78、切点切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。 79、什么是引入?引入允许我们在已存在的类中增加新的方法和属性。 80、什么是目标对象?目标对象是由一个或多个切面通知的对象。它将始终是一个代理对象。它也被称为通知(advised)对象。 81、什么是代理?代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。 82、有哪些不同类型的代理?
83、什么是织入。什么是织入应用的不同点?织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。 织入可以在编译时,加载时,或运行时完成。 84、Spring AOP中关注点和横切关注点有什么区别?关注点是我们希望在应用程序的模块中拥有的行为。关注点可以定义为我们想要实现的功能。 横切关注点是一个在整个应用程序中都适用的关注点,它会影响整个应用程序。例如,日志记录、安全性和数据传输是应用程序中几乎每个模块都需要的关注点,因此它们是横切关注点。 85、解释基于XML Schema方式的切面实现在这种情况下,切面由常规类以及基于XML的配置实现。 86、解释基于注解的切面实现在这种情况下(基于@AspectJ的实现),涉及到的切面声明的风格与带有java5标注的普通java类一致。 G.Spring Model View Controller (MVC)87、什么是Spring MVC框架?Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。 88、创建spring mvc应用程序所需的最少配置是什么?为了创建一个简单的Spring MVC应用程序,我们需要做以下工作:
89、说出Spring MVC请求处理的主要流程?
90、DispatcherServletSpring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。 91、WebApplicationContextWebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。 92、 Spring MVC中的控制器是什么?控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。 93、你如何将spring mvc框架与MVC架构联系起来?SpringMVC框架:
MVC架构:
94、Spring MVC中的ViewResolver是什么?Spring提供了ViewResolver,它使你能够在浏览器中渲染模型,而无需将绑定到特定的视图技术。例如,Spring允许您使用jsp、Velocity模板和XSLT视图。对Spring处理视图的方式很重要的两个接口是ViewResolver和View。ViewResolver提供视图名称和实际视图之间的映射。View接口处理请求的准备工作,并将请求移交给某一个视图技术。 95、MultipartResolver是什么?怎么使用?spring mvc通过MultipartResolver提供多请求支持。MultipartResolver解析入站多请求。你可以通过在DispatcherServlet应用程序上下文中注册MultipartResolver bean来启用多请求支持。 96、如何在spring mvc应用程序中上传文件?Spring为通过MultipartResolver接口为上传文件提供了内置支持。该字段还有一个验证器,用于检查上载的文件的大小是否大于零。最后只需要一个简单的视图,其中包含一个带有上载文件选项的表单。 97、Spring Web MVC怎么校验数据?这里有三种方式去提供校验:使用注解、手动校验、或者两者混合。 98、什么是springmvc拦截器以及如何使用它?Spring的处理程序映射机制包括处理程序拦截器,当你希望将特定功能应用于某些请求时,例如,检查用户主题时,这些拦截器非常有用。拦截器必须实现org.springframework.web.servlet包的HandlerInterceptor。此接口定义了三种方法:
H.扩展99、Spring Security是什么?Spring security是Spring框架中最重要的模块之一。它使开发人员能够以一种可管理的方式轻松地集成安全特性。在下面的示例中,我们将展示如何在springmvc应用程序中实现Spring安全性。 100、为什么要用SpringBoot?以下是使用SpringBoot的一些好处:
水平有限,难免错漏,欢迎指出或直接查看原文! (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |