SpringMybatis经典面试题总结

  • SpringBean的初始化流程
  • ApplicationContext和BeanFactory的区别
  • 标准答案
  • Spring中经典的9种设计模式
  • Mybatis执行流程
  • 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?(id是否可以相同)


SpringBean的初始化流程

  1. Spring Bean 的初始化主要实现在bean.factory包下的AbstractAutowireCapableBeanFactory类中
  2. 具体实现流程为这个类里的三个初始化流程,分别为
  1. 实例化createBeanInstance【里面包含了推断构造方法,简单来说就是对bean进行实例化】
  2. 属性赋值populateBean 【填充属性,处理@AutoWried,调用bean的实例化后的方法】
  3. Bean的初始化initializeBean【调用bean的初始化方法】, 同时initializeBean前后还会对aware进行调用处理【BeanNameAware、BeanClassLoaderAware、BeanFactoryAware】和【EnvironmentAware、ApplicationContextAware(BeanPostProcessor before)】,之后调用【invokeInitMethods 就是initializeBean的流程】,之后会调用一次【BeanPostProcessor的另一个调用点 after】
  4. DisposableBean 生命周期的销毁, ConfigurableApplicationContext#close()方法作为入口,实现是通过循环取所有实现了DisposableBean接口的Bean然后调用其destroy()方法

ApplicationContext和BeanFactory的区别

ApplicationContext 继承自 BeanFactory,提供了更多的有用的功能;

  1. 国际化(MessageSource)
  2. 访问资源,如URL和文件(ResourceLoader)
  3. 对Web应用的支持
  4. 消息发送、响应机制(ApplicationEventPublisher)
  5. AOP(拦截器)

标准答案

ApplicationContext继承了BeanFactory,BeanFactory是Spring中比较原始的Factory,它不支持AOP、Web等Spring插件,而ApplicationContext不仅包含了BeanFactory的所有功能,还支持Spring的各种插件,还以一种面向框架的方式工作以及对上下文进行分层和实现继承。
BeanFactory是Spring框架的基础设施,面向Spring本身;而ApplicationContext面向使用Spring的开发者,相比BeanFactory提供了更多面向实际应用的功能,几乎所有场合都可以直接使用ApplicationContext而不是底层的BeanFactory

Spring中经典的9种设计模式

Spring中经典的9种设计模式

Mybatis执行流程

java bean 初始化 初始化bean的几种方式_面试

通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?(id是否可以相同)

Mapper接口的工作原理是JDK动态代理,mybatis会对每一个mapper代理生成一个mapperProxy对象,代理对象会拦截接口方法,转而自动对应到sqlsession上,最终由Executor执行

参数不同,方法不可重载