栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring 面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 面试题

一堆八股文

三级缓存解决循环依赖

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

getBean流程

去说说getBean的流程

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

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

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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号