Spring面试题

1.Spring的两大特性

   AOP(Aspect Oriented Programming,面向切面编程)与IOC(Inverse of Control,控制反转)。

追问:Spring的AOP原理是什么?实现AOP的方式?

Spring AOP的底层使用的是动态代理,有两种实现方式:

JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

CGlib动态代理:以CGLIB(Code Generation Library)的方式进行代理,它采用底层字节码技术,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

区别:JDK 代理只能对实现接口的类生成代理;CGLIB 是针对类实现代理,继承指定类并生成一个子类,因此不能代理 final 修饰的类

在Spring中优先使用哪种AOP?

(1)如果目标对象实现了接口,默认采用JDK的动态代理,但也可强制使用CGlib动态代理;

(2)如果目标对象没有实现接口,那么必须采用CGlib库;

Spring会自动在JDK动态代理和CGlib之间转换。

Spring的bean的初始化及生命周期

(1)实例化    Bean:

    对于BeanFactrory容器,当向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的bean的依赖时,容器就会调用createbean进行实例化;

    对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

(2)设置对象属性(依赖注入):

    实例化对象后的bean呗封装在BeanWrapper对象中,然后Spring根据BeanDefinition中的信息以及通过BeanWrapper提供的设置属性的接口完成依赖注入。

(3)处理Aware接口:

    Spring会检测该Bean是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:

①如果该 Bean 实现了 BeanNameAware 接口,会调用它实现的 setBeanName (String beanId) 方法,入参是 Spring 配置文件中 Bean 的 id 值;

②如果该Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法

,传递的是Spring的本身。

③如果该Bean已经实现ApplicationContextAware 接口,会调用 setApplicationContext (ApplicationContext) 方法,入参是 Spring 上下文;

(4)处理 BeanPostProcessor 接口:

如果该 Bean 实现了实现了 BeanPostProcessor 接口,那将会调用 postProcessBeforeInitialization (Object obj, String s) 方法;

(5)InitializingBean 与 init-method:

如果该 Bean 在 xml 中配置了 init-method 属性,则会自动调用其配置的初始化方法。

以上几个步骤完成后,Bean 就已经被正确创建了,之后就可以使用这个 Bean 了。

(6)处理 DisposableBean 接口:

​当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了 DisposableBean 这个接口,会调用其实现的 destroy () 方法;

(7)处理 destroy-method 属性:

最后,如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的销毁方法。

问题 3:Spring 支持的事务管理类型有哪些?各自的优缺点是什么

参考答案:

(1)编程式事务管理:是指在代码中手动的管理事务的提交、回滚等操作;

(2)声明式事务管理:将事务管理作为一个 “切面” 代码单独编写,只用关心核心业务逻辑代码,然后通过 AOP 技术将事务管理的 “切面” 代码织入到业务类中。

​声明式事务的缺点在于只能作用到方法级别,无法做到像编程式事务那样能控制到代码块级别;其优点则在于可以将业务代码和事务管理分离,编程式事务则对业务代码侵入式太强。

Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring 是无法提供事务功能的。对于纯 JDBC 操作数据库,想要用到事务,可以按照以下步骤进行:

​ (1)获取连接 Connection con = DriverManager.getConnection ();

​ (2)开启事务 con.setAutoCommit (true/false);

​ (3)执行增删查改;

​ (4)提交事务 / 回滚事务 con.commit () /con.rollback ();

​ (5)关闭连接 conn.close ();

​使用 Spring 的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由 Spirng 自动完成。

在编程式事务中,即通过编写代码实现事物管理,包括定义事务的开始,程序正常执行后的事物提交,异常时进行的事务回滚;

在声明式事务中,通过 AOP 功能来实现声明式事务处理的,具体操作(比如事务实行的配置和读取,事务对象的抽象),用 TransactionProxyFactoryBean 接口来使用 AOP 功能,生成 proxy 代理对象,通过 TransactionInterceptor 完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中。说得更详细一点:

​ (1)Spring 事务处理模块是通过 AOP 功能为没有编写事务代码但加上了 @Transactional 注解的类生成代理。

​ (2)生成代理的过程中会读取 @Transactional 注解中的配置,比如传播行为、隔离级别、事务超时等。

(3)生成的代理会拦截目标对象的外部方法调用,自动开启事务、自动提交事务或回滚。

三、总结

​ Spring 是 Java 应用最广泛的框架,也是 Java 企业级开发事实上的标准,通常是框架面试题的第一选择。 这类面试题可深可浅,文章最开始提到的三类框架面试题:使用性面试题、原理性面试题、开放性面试题,从难度上讲是层层递进的关系。在一次面试中,一般不会这三类题都考,面试官有时候会一直问直到候选人答不出来以确定候选人的真实水平,有时候则适可而止达到岗位要求即可,这是不同公司不同岗位决定的。不过对面试题来说,这三类题都要有所准备,在平常使用过程中,也要多问问为什么,多想想 WHAT、HOW、WHY。

​ 框架题也是强实践性的题,如果确实没有接触过,那么面试时遇到相关题目时直接告知面试官即可,不必强撑着回答,因为这种情景下的回答必然是千疮百孔,反而适得其反,好的面试官则会适时调整面试方向。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350