11 2022 档案
摘要:对我来说,mybatis有几个主要核心模块吧。包括:插件(Plugin)、缓存、动态sql解析,这几个是比较难理解的部分。 加载项目的时候会把mybatis里面的sql解析成一个个的MapperedStatement,里面呢包含一系列的SqlNodel,比如WhereSqlNode,IfSqlNod
阅读全文
摘要:加载切面 基于InfrastructureAdvisorAutoProxyCreator 默认会有一个BeanFactoryTransactionAttributeSourceAdvisor 事务的Advice为:TransactionInterceptor TransactionAttribute
阅读全文
摘要:目前 Spring AOP 一共有三种配置方式,Spring做到了很好的向下兼容。 Spring 1.2 基于接口的配置,最早的Spring AOP 是完全基于几个接口的。 Spring 2.0 schema-based 配置:Spring 2.0 以后使用 XML 的方式来配置,使用命名空间<ao
阅读全文
摘要:多线程下解决读取不完整Bean问题 1. 二级缓存不能解决在多线程Bean在创建过程中读取不完整Bean的问题。 额。。虽然在实际开发中不会启动ioc过程创建多线程去getBean,但是Spring毕竟作为一个容器,需要解决这种多线程导致读取不完整Bean的问题。 通过加锁解决。 在getBean的
阅读全文
摘要:一级缓存:存储单例Bean的Map对象。 二级缓存:为了将成熟Bean和纯净Bean分离开来,职责更明确,代码更容易维护,避免由于多线程的环境下读取到不完整的Bean。二级缓存不能存储原生对象。 三级缓存:解决因为AOP,创建动态代理导致的问题。存储函数式接口,钩子函数。 如果没有出现循环依赖,则会
阅读全文
摘要:invokeBeanFactoryPostProcessors:调用bean工厂的后置处理器,解析配置类,将配置类注册成Bean定义。 调用所有的BeanDefinitionRegistryPostProcessor 和 BeanFactoryPostProcessor。 调用postProcess
阅读全文
摘要:核心模块部分截图: IOC 源码加载过程: 1. new AnnotationConfigApplicationContext(): 再看:AnnotationConfigApplicationContext()的无参构造方法:(因为上面有参构造方法调用了 this()): 这些后置处理器最终注册成
阅读全文
摘要:BeanFactory: Spring 顶层核心接口,使用了简单工厂模式,负责生产Bean。 BeanDefinition:Spring顶层核心接口,封装了生产Bean的一切原料。 从读取配置到扫描到注册bean,主要用到以下类: BeanDefinitionReader BeanDefinitio
阅读全文
摘要:定时线程池 使用场景: 1. 分布式锁 - redis 2. springCloud - 服务注册与发现中心 ScheduledThreadPoolExecutor 它用来处理延时任务或定时任务。 它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式
阅读全文
摘要:线程池的创建 public ThreadPoolExecutor(int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 最大允许线程不干活的时间 TimeUnit unit, // 时间单位 B
阅读全文
摘要:1.7-hashtable = 数组 + 链表 (>=) 1.8 = 数组 + 链表 + 红黑树 HashMap 的容量 -》 数组的大小 new HashMap(): 如果不写构造参数,默认大小是16, 如果说写了初始容量:11,hashmap的初始容量就是11? Hash冲突解决方式: 1.7
阅读全文
摘要:1. 全面地走一遍Atomic包下面的原子类; 2. CAS -> 原子比较与交换算法的bug-ABA 问题; 3. 魔法类 - Unsafe,ini -> 堆外内存 Atomic 1. atomic底层实现是基于无锁算法 - cas; 基于魔术类Unsafe提供的三大cas-api完成; Comp
阅读全文
摘要:semaphore Semaphore 字面意思是信号量的意思。它的作用是控制访问特定资源的线程数量,底层依赖AQS的状态state,是生产中比较常用的一个工具类。(基于共享模式) // 信号量 Semaphore semaphore = new Semaphore(5); // 初始 state的
阅读全文
摘要:线程通信的一个工具。在任意时刻,不管并发有多高,在单JVM上面,同一时间永远只有一个线程能够对队列进行入队或者出队操作。 1. 线程安全的队列; 2. 队列类型:无限队列、有限队列; 常见的4种阻塞队列: ArrayBlockingQueue 由数组支持的有界队列 LinkedBlockingQue
阅读全文
摘要:参考: https://blog.csdn.net/Black794/article/details/121700399
阅读全文