前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱。所以需要继续加强。
这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说出来的东西才有意义。这种面试的问法,也只能是面试的问法,对实际的掌握还是没有丝毫意义的。所以我认为 有机会一定要读下spring的源码 来过一遍 具体实现,这样的才是有意义的做法。同意的请举手。
这里说明一下这三个spring 面试问题:
1、回客科技 面试的 实现ioc 容器用到的技术
第1种 说法:
IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC。
原理简单说明:
其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外提供一个getBean()方法,以便我们获得这bean。
第2种 说法:
参考:https://blog.csdn.net/zhanghaor/article/details/73431021
使用的主要知识点:
dom4j解析xml文件
xpath表达式(用于解析xml中的标签)
java反射机制
内省(获取Bean属性的set方法进行赋值)
第3种 说法
IOC/DI使用到的技术
1. JDOM:JDOM是对xml文件进行解析的技术,Spring的配置文件applicationContext.xml就是由JDOM进行解析的,它可以提取出xml文件中定义的标签和属性值。
2. 反射机制:对配置文件中的类名使用反射机制可以实现类加载初始化等工作,也可以调用类的方法进行属性注入,java.lang.reflect提供了反射相关的工具
2:简述BeanFactory的实现原理
这里是cp的代码,为什么cp 是因为 这几句关键的东西需要我记住的。
先来看看Java代码获取Spring中Bean的代码(一共有五种方式,这里只展示其中一种方法):
有没有发现上面的代码与利用反射实现工厂模式的代码很相似。对,你没有看错,Spring中的BeanFactory用到的就是简单工厂模式。
现在的思路就更加清晰了,要想实现Spring中的BeanFactory,无非就用到了以下几个技术:
1.使用简单工厂模式来处理bean容器。
2.解析xml文件,获取配置中的元素信息。
3.利用反射获实例化配置信息中的对象。
4.如果有对象注入,使用invoke()方法。
5.实例化的对象放入bean容器中,并提供getBean方法。
通过以上步骤就实现了spring的BeanFactory功能,只要在配置文件中配置好,实例化对象的事情交给BeanFactory来实现,用户不需要通过new对象的方式实例化对象,直接调用getBean方法即获取对象实例。
3、大搜车面试的 spring 怎么实现的依赖注入(DI)
参考博客:http://blog.163.com/qqabc20082006@126/blog/static/2292852520091125112112902/
在Spring容器中为一个bean配置依赖注入有三种方式:
· 使用属性的setter方法注入 这是最常用的方式;
· 使用构造器注入;
· 使用Filed注入(用于注解方式).
感谢 以上博客代码分享人,目前没有时间读源码,只能先记住了。面试还是需要应付一下的~~