Spring 面试题

导读:本篇文章讲解 Spring 面试题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一堆八股文

三级缓存解决循环依赖

说下说三个缓存的名字、怎么搭配的、和简单说下getBean的流程。
singletonObjects、earlySingletonObjects、singletonFactories

getBean流程

去说说getBean的流程

JDK动态代理 Cglib代理选取。简单说下俩个bean的特点,代理类类名特点。

JDK动态代理 :这个比较熟悉直接梳理,也比较简单。
创建入口JdkDynamicAopProxy类的getProxy 方法里,直接调用了JDK的方法,直接把this作为 InvocationHandler传进去了,那么所有JDK动态代理的对象都是JdkDynamicAopProxy的invoker来处理了。

/**public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)
*/
return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);

Cglib代理:这个DeBug过看具体的Spring Bean实例也不陌生一堆Enhancer
创建入口CglibAopProxy类的getProxy 方法里,先Enhancer enhancer = createEnhancer();然后一堆设置属性最主要的属性enhancer.setCallbacks(callbacks);,一堆判断,最后enhancer.create()(有构造函数就是传构成函数的enhancer.create(this.constructorArgTypes, this.constructorArgs))。
简绍AOP有个不错的博客Spring源码剖析-拜托面试官别再问我AOP原理了

自己的bean怎么注入到spring

说说自己写的那个注解,实现枚举类自动暴露HTTP接口。
第一步:javassist 写字节码。(也可用牛逼轰轰的ASM)
第二步:构建BeanDefinition注入到Spring。
也可以引申为MyBatis 怎么注入的Spring。
说下代理类的Handle是 :MapperProxy 的 invoke 方法。
说下包扫描,解析XML,将 mapper 文件中的每个 SQL 封装成 MappedStatement。
再说下包扫描解析接口生成JDK动态代理。

AOP 怎么实现的切面

所有的动态代理的类的Handle都是 JdkDynamicAopProxy 这个invoker会获取切面的一个链,封装一个ReflectiveMethodInvocation然后依次调用。参考:JdkDynamicAopProxy 学习。
Cglib代理类的Handle就是CglibAopProxy,来处理。

事务管理

基于AOP实现。
事务增强对该接口的实现为TransactionInterceptor。invoker方法。里用的就是TransactionManager
PlatformTransactionManager 是所有事务管理必须实现的接口。继承了TransactionManager。有三个方法getTransaction、commit、rollback 参数都是TransactionStatus status
AbstractPlatformTransactionManager 是一个抽象好的基类。

Spring MVC

DispatcherServlet
WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76451.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!