文档章节

Spring面试题部分总结【慨念】

薛小二
 薛小二
发布于 05/23 21:10
字数 2173
阅读 13
收藏 6

什么是Spring?

spring是一个企业级应用的开源开发框架,主要用来开发java应用,spring框架目标就是简化企业级应用开发。

Spring用到了那些设计模式?

spring里面用到了大量的设计模式,这里举例比较有代表性的:

代理模式:在aop中使用比较多 单例模式:在spring配置文件定义的bean默认为单例模式 模板模式:用来解决代码重复问题 工厂模式:BeanFactory用来创建对象的实例。

使用Spring框架有什么好处?

1.轻量:spring是轻量的,基本版本大约2MB 2.控制反转;spring通过这个实现了松散耦合,对象给他们依赖,而不是创建对象 3.spring支持面向切面的编程,并且把业务逻辑和系统服务分开 4.spring容器包含管理应用中对象的声生命周期和配置

什么是Spring IOC容器?

spring IOC 负责创建对象,管理对象(通过依赖注入),装配对象,配置对象,并管理对象的生命周期

IOC的优点是什么?

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,最小的代价和最小的侵入性使松散耦合得以实现

ApplicationContext通常实现的是什么?

ClassPathXmlApplicationContext:此容器从一个xml文件中加载beans的定义。xml bean 配置文件的全路径名必须提供给他的构造函数。 WebXmlApplicationContext:此容器加载一个xml文件,此文件定义了一个WEB应用的所有bean。

Spring有几种配置方式?

基于xml的配置 基于注解的配置 基于java的配置

什么是Spring的依赖注入?

依赖注入是ioc的一个方面,是指不需要你创建对象,只需要描述对象如何创建,你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。

有哪些不同类型的IOC(依赖注入)方式?

构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的 setting:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

构造器参数实现强制依赖,setter方法实现可选依赖

解释Spring支持几种bean的作用域?

singleton:这是默认的,单例模式,不管有多少个请求,每个容器只有一个bean实例化 prototype:它和单例相反为每一个请求提供一个实例,原型模式 request:在每一个客服端的网络请求创建一个实例,在请求完成后,bean失效并垃圾回收器回收 session:确保每一个session中有一个bean实例,在session过期后,bean会随之失效 global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

Spring框架中的单例bean是线程安全的吗?

肯定不是线程安全的,当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对该单列状态的修改(体现为该单列的成员属性),则必须考虑线程同步问题.

. 什么是bean的自动装配?

spring容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>和<property>配置,能通过Bean工厂自动处理bean之间的协作。

自动装配有哪些局限性 ?

重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

什么是基于java的Spring注解配置?请举例

@Configuration注解,表示该类是一个配置类,用来定义bean资源 @bean:由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IoC容器来管理 ,@Bean声明所起到的作用与<bean/> 元素类似

怎么开启注解配置

注解装配默认是不开启的,使用必须在配置文件配置context:annotation-config/元素。

@Required 注解

这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显示的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛BeanInitializationException

@Autowired 注解

;通过类型来实现自动注入bean。和@Qualifier注解配合使用可以实现根据name注入bean

@Qualifier 注解

@Autowired一块使用,在同一类型的bean有多个的情况下可以实现根据name注入的需求

@Resource 注解

默认是根据name注入bean的,可以通过设置类型来实现通过类型来注入

Spring框架支持的事务管理类型

spring支持两种类型的事务管理: 编程式事务管理:通过编程的方式管理事务,但是极难维护 声明式事务管理:可以将业务代码和事务管理分离,只需要注解和xml配置来管理事务。

你更倾向用那种事务管理类型?

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

什么是Aop

面向切面编程,是一种编程技术,允许程序模块化横向切割关注点,如日志和事务管理

在Spring AOP中关注点和横切关注点有什么不同?

关注点是一个模块的行为,一个关注点可能会被定义为我们想要实现的功能,横切关注点是贯穿整个应用程序的关注点,并影响整个应用,比如日志,数据传输

Spring有哪些不同通知类型?

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

spring切面可以应用五种类型的通知: before:前置通知,在一个方法执行前调用 after:在方法执行后调用的通知,无论方法是否执行成功 after-returning:仅当方法执行完成后执行的通知 after-throwing:在方法抛出异常退出时执行的通知 around在方法执行之前和执行之后都会执行的通知

Spring AOP 代理是什么?

代理是使用非常广泛的设计模式,代理是通知目标对象创建后的对象。

连接点(Joint Point)和切入点(Point cut)是什么?

连接点是程序执行的一个点,例如,一个方法的执行或者一个异常的处理,一个连接点总是代表一个方法执行。举例来说,所有定义在你的 EmpoyeeManager 接口中的方法都可以被认为是一个连接点,如果你在这些方法上使用横切关注点的话。

切入点是一个匹配连接点的断言或者表达式。Advice 与切入点表达式相关联,并在切入点匹配的任何连接点处运行(比如,表达式 execution(* EmployeeManager.getEmployeeById(...)) 可以匹配 EmployeeManager 接口的 getEmployeeById() )

什么是织入。什么是织入应用的不同点?

织入是将切面和其他应用类型或对象连接或创建一个通知对象的过程。 织入可以在编译时,加载时或运行时完成。

© 著作权归作者所有

薛小二
粉丝 8
博文 32
码字总数 53494
作品 0
伦敦
私信 提问
感谢各位的关注,这里分享一下这几天面试的内容

这几天在面试,有些面试题想跟大家分享一下。这里不按公司去区分了,按技术点吧。至于公司,大公司小公司小公司都有,比较有名的 X东、X知名P2P企业、eX宝等等。面试官有些出身挺高的,比如阿...

尚浩宇
2015/10/20
1K
11
Java系列文章(全)

JVM JVM系列:类装载器的体系结构 JVM系列:Class文件检验器 JVM系列:安全管理器 JVM系列:策略文件 Java垃圾回收机制 深入剖析Classloader(一)--类的主动使用与被动使用 深入剖析Classloader(二...

www19
2017/07/04
0
0
上周面试回来后的Java面试总结,想进BAT必看

上周陪同之前一起工作的同事去面试(乔治,小袁,鹏飞(面试人)),第一站是去深圳,第二站上海,第三站杭州。面试什么公司我在这里就不多说了,你们知道是一线公司就行。其实本来真的没打算...

Java团长17
2018/07/11
0
0
吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人!

面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望。 下面,我给大家总结下有...

Java技术栈
2018/10/15
0
0
关于 Struts2 和 SpringMVC 区别?

又是一个常问的面试题,真是面试一次长一次见识。 那我们先就从原理出发: springMVC 原理(见下图): SpringMVC 流程 1、 用户发送请求至前端控制器 DispatcherServlet。 2、 DispatcherSe...

举个_栗子
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

那些你可能不知道的视频下载奇技淫巧

之前已经写过好几篇的奇技淫巧系列了,今天说说怎么快速下载视频。 我平常经常看视频的网站就是爱奇艺,b站,微博,知乎,网易这些。 这里以微博为例,下载周杰伦的《晴天》,微博地址是 ht...

苏生不惑
5分钟前
0
0
桶排序

private static double[] bucketSort(double[] array){ //1.得到数列的最大值和最小值,并算出差值d double max=array[0]; double min=array[0];// 找出......

暗中观察
23分钟前
0
0
为什么加个注解@Transtaional就可以保证事务的一致性和完整性?

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http:......

architect刘源源
今天
39
0
硅谷对于禁华为坐立不安

5 月 15 日,美国商务部决定把华为及其多家关联公司列入一份“实体名单”后,20 日又宣布给与华为 90 天“临时执照”,为“依赖华为设备的美国通信商留出余地”。 尽管目前给出了“临时执照”...

linuxCool
今天
5
0
Java—System类入门学习

第三阶段 JAVA常见对象的学习 System类 System类包含一些有用的字段和方法,他不能被实例化 //用于垃圾回收public static void gc()//终止正在运行的java虚拟机。参数用作状态码,根据惯例...

BWH_Steven
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部