mybatis

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对象有可能不是同一个对象

原文地址:https://www.cnblogs.com/Baronboy/p/14508239.html