前段时间,我发了一个关于 Spring 的脑图。不知道有多少人看过了?看过的请留言举手。
今天,我要抽个时间靠靠大家了。看看大家对 Spring 框架掌握的怎么样?
先来看看第一个面试题:Spring 中都用到了哪些设计模式?
我告诉你,Spring 框架中用到了很多设计模式。比如:工厂模式、单例模式、代理模式、模板模式、装饰器模式、责任链模式、观察者模式、策略模式、构建模式、原型模式等。
工厂模式用到的类有:BeanFactory 和 ApplicationContext 等。
单例模式:Spring依赖注入Bean实例默认是单例的。Spring的依赖注入(包括lazy-init方式)都是发生在 AbstractBeanFactory 的 getBean 里。 getBean 的 doGetBean 方法调用 getSingleton 进行bean的创建。
代理模式:这个估计都知道。AOP 的原理就是代理模式。最常见的通过 Proxy 类中的 newProxyInstance 来完成代理操作。再比如:JdkDynamicAopProxy 和 Cglib2AopProxy 等。
模板模式:这个也很常见,比如:JdbcTemplate、RestTemplate 等。
装饰器模式:常见的有 Spring Session 的 ServletRequestWrapper。再比如:SessionFactory 等。
责任链模式:这个很简单,一般用到过滤器的地方基本上都是责任链模式,比如:HandlerExecutionChain 等。
观察者模式:ApplicationEvent、ApplicationListener 等。
策略模式:比如,Spring 类中的 SimpleInstantiationStrategy 等。
构建模式:BeanDefinitionBuilder 等。
原型模式:这种模式,用过 Spring 的应该都知道吧。在 AbstractBeanFactory 中使用一种特定的原型设计模式,将 bean 初始化为原型作用域。
适配器模式:AdvisorAdapter 和 MethodBeforeAdviceAdapter 等。
第二题:ApplicationContext 通常的实现类有哪些?
最常见的有 3 个。也就是大家加载 xml 的那 3 个。
FileSystemXmlApplicationContext :此容器从一个 XML 文件中加载 beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载 beans 的定义,这里,你需要正确设置 classpath 因为这个容器将在 classpath 里找 bean 配置。
WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有 bean。
还有一个基于注解的实现,可能被很多人忽略了。我前面分享脑图的时候,那个类图上有。就是 AnnotationConfigWebApplicationContext。
第三题:解释一下 Spring 支持的几种 bean 的作用域?
Spring 框架支持以下五种 bean 的作用域:
- singleton : bean在每个Spring ioc 容器中只有一个实例。
- prototype:一个bean的定义可以有多个实例。
- request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
- session:在一个 HTTP Session 中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
- global-session:在一个全局的 HTTP Session 中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
缺省的 Spring bean 的作用域是 Singleton。
更多关于 Spring 的面试题,请扫描我的程序员题库小程序查看。
: » 关于Spring常见的面试题,你都会哪些?
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/252085.html