青训营笔记

176 阅读2分钟

通过阅读Spring源码,从简化版Spring了解spring运行机制

扫描指定包下面的类

扫描指定包下的所有类,听起来好像一时摸不着头脑,其实它等同于另一个问题:如何遍历文件目录?

那么存放类信息应该用什么呢?我们看看上面例子中getBean的方法,是不是像Map中的通过key获取value?而Map中还有很多实现,但线程安全的却只有一个,那就是ConcurrentHashMap(别跟我说HashTable) 定义存放类信息的map。

实例化

现在已经把所有适合的类都解析好了,实例化。 遍历classMap进行实例化Bean。

组合

两个核心方法已经写好了,接下把它们组合起来,我把它们实现在自定义的ApplicationContext类中,构造方法如下:


public ApplicationContext(Class<?> configClass) {
  // 1.扫描配置信息中指定包下的类
  this.scan(configClass);
  // 2.实例化扫描到的类
  this.instantiateBean();
配置 JPA 的事务管理器

这段内容介绍了 sync 包提供了基本的同步原语,例如互斥锁。除了 Once 和 WaitGroup 类型外,大多数都是为低级库例程使用而设计的。更高级别的同步最好通过通道和通信来完成。包含在此包中定义的类型的值不应被复制。

简单来说,这段内容是说 sync 包提供了一些基本的同步机制,但是除了 Once 和 WaitGroup 类型外,其他的都是为低级别的库函数设计的。更高级别的同步最好使用通道和通信。此外,这个包中定义的类型的值不应该被复制。 这段内容是关于Go语言中的条件变量(Cond)的说明。Cond是一个用于协调多个goroutine等待或通知事件发生的同步原语。每个Cond都有一个关联的Locker(通常是Mutex或RWMutex),在改变条件和调用Wait方法时必须持有该锁。Cond不能在第一次使用后被复制。在Go内存模型的术语中,Cond安排了一个Broadcast或Signal调用在解除阻塞的任何Wait调用之前“同步”。对于许多简单的用例,用户使用通道比使用Cond更好(Broadcast对应于关闭通道,Signal对应于在通道上发送)。对于更多关于替代sync.Cond的内容,可以参考Roberto Clapis的高级并发模式系列,以及Bryan Mills的并发模式讲座。