mybatis源码设计模式
看源码技巧: 宏观->微观->图解
mapper有四种形式: resource, url, class, package
哪种优先级最高: package-> resource -> url -> class
建造者模式: mybatis初始化参数过多,所有将繁杂的参数封装到一个对象中,利用建造者模式进行初始化
执行器的3种枚举类型
默认是使用SIMPLE
mybatis默认的一级缓存是否开启:开启
会创建缓存执行器
openSession实际上是对执行器进行初始化
Bean的生命周期
需要有一个class -> BeanDefinition -> BeanFactoryPostProcesor(这个是后置处理器,BeanFactory需要构建,构建后就执行后置处理器) -> 创建实例 new UserService() -> 填充属性 ->
Aware(将spring生成的beanName回传),实现BeanNameAware接口可以获取到容器生成的beanName
实现BeanFactoryAware接口可以得到BeanFactory的名称
-> 初始化 -> APO -> 单例池(Map<BeanName,对象>)
BeanDefinition
beanFactory.registerSingleton("XXX",new User()); 可以new一个对象交给spring
使用FactoryBean的方式
spring循环依赖
自己手工new出来的两个相互依赖的对象是不会产生问题的
spirng中一个对象会经过一系列的bean生命周期才会创建出来,才会出现循环依赖的问题
循环依赖解决办法
注入B的A对象和加工后的A对象有可能不是同一个对象