diff --git "a/2023.06.15 \343\200\214\345\260\217\351\251\254\345\223\245\346\212\200\346\234\257\345\221\250\346\212\245\343\200\215- \347\254\254\344\272\224\345\215\201\345\205\255\346\234\237\357\274\232Spring \345\256\271\345\231\250\345\271\266\350\241\214 Bean \347\224\237\345\221\275\345\221\250\346\234\237\345\244\204\347\220\206\345\256\236\347\216\260/README.md" "b/2023.06.15 \343\200\214\345\260\217\351\251\254\345\223\245\346\212\200\346\234\257\345\221\250\346\212\245\343\200\215- \347\254\254\344\272\224\345\215\201\345\205\255\346\234\237\357\274\232Spring \345\256\271\345\231\250\345\271\266\350\241\214 Bean \347\224\237\345\221\275\345\221\250\346\234\237\345\244\204\347\220\206\345\256\236\347\216\260/README.md"
new file mode 100644
index 0000000..43ea382
--- /dev/null
+++ "b/2023.06.15 \343\200\214\345\260\217\351\251\254\345\223\245\346\212\200\346\234\257\345\221\250\346\212\245\343\200\215- \347\254\254\344\272\224\345\215\201\345\205\255\346\234\237\357\274\232Spring \345\256\271\345\231\250\345\271\266\350\241\214 Bean \347\224\237\345\221\275\345\221\250\346\234\237\345\244\204\347\220\206\345\256\236\347\216\260/README.md"
@@ -0,0 +1,128 @@
+
+# 底层实现
+
+## 代码实现
+项目工程 - [microsphere-spring](https://github.com/microsphere-projects/microsphere-spring)
核心代码 - [io.microsphere.spring.context.event.ParallelBeanFactoryListener](https://github.com/microsphere-projects/microsphere-spring/blob/main/microsphere-spring-context/src/main/java/io/microsphere/spring/context/event/ParallelBeanFactoryListener.java)
+
+
+# 知识贮备
+
+## Spring 可依赖对象
+
+### Spring Bean 对象
+
+#### Spring BeanDefinition
+
+##### Spring Class 级别 BeanDefinition
+指定 BeanDefinition class
指定 BeanDefinition class -> FactoryBean 实现
@Component AnnotatedBeanDefinition class = 配置类
+
+##### Spring 工厂方法 BeanDefinition
+BeanDefinition#setFactoryBean (可选)
+
+- 如果存在的话,说明工厂方法是对象方法
+- 如果存在的话,说明工厂方法是类方法
+
+BeanDefinition#setFactoryMethod(可选)
+
+- 如果存在的话,Bean 会通过工厂方法来创建
+
+##### Spring @Bean BeanDefinition
+Spring 3.0 +
Configuration class @Bean 方法声明
通过 AnnotatedBeanDefinition#getFactoryMethodMetadata() 获取 @Bean 方法信息
+
+##### Spring Suppiler BeanDefinition
+Spring 5.0 +
BeanDefinition 执行 org.springframework.beans.factory.support.AbstractBeanDefinition#setInstanceSupplier
该 Bean 通过 AbstractBeanDefinition#getInstanceSupplier() 方法返回 Supplier 来获取
+
+#### Spring 外部注册的 Singleton 对象
+SingletonBeanRegistry#registerSingleton(String,Object)
被注册 Singleton 对象的生命周期由 IoC 容器外部管理,该对象是一个已准备就绪的 Bean
+
+### Spring ResolvableDependency
+手动注册,AbstractApplicationContext
+```java
+ protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {
+ ...
+ beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
+ beanFactory.registerResolvableDependency(ResourceLoader.class, this);
+ beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
+ beanFactory.registerResolvableDependency(ApplicationContext.class, this);
+ ...
+ }
+```
+
+```java
+public class SomeBean {
+
+ @Autowired
+ private ApplicationContext context; // 非 Spring Bean,而是 ResolvableDependency
+
+ // 非 Spring Bean,而是 ResolvableDependency
+ @Autowired
+ private ConfigurableApplicationContext applicationContext;
+
+ @Autowired
+ private EchoService echoService; // EchoService Spring Bean,通过类型依赖查找
+
+ @Autowired
+ @Qualifier("userService")
+ private UserService userService; // UserService Spring Bean,通过 @Qualifier 查找
+
+ @Autowird
+ private Map userServices;
+}
+```
+
+SomeBean 实际上依赖的 Spring Beans:EchoService 和 UserService,需要进一步分析出两个类型对应的 Bean 名称。
+
+
+```java
+ public MybatisAutoConfiguration(MybatisProperties properties,
+ ObjectProvider interceptorsProvider,
+ ObjectProvider typeHandlersProvider,
+ ObjectProvider languageDriversProvider,
+ ResourceLoader resourceLoader,
+ ObjectProvider databaseIdProvider,
+ ObjectProvider> configurationCustomizersProvider,
+ ObjectProvider> sqlSessionFactoryBeanCustomizers) {
+ this.properties = properties;
+ this.interceptors = interceptorsProvider.getIfAvailable();
+ this.typeHandlers = typeHandlersProvider.getIfAvailable();
+ this.languageDrivers = languageDriversProvider.getIfAvailable();
+ this.resourceLoader = resourceLoader;
+ this.databaseIdProvider = databaseIdProvider.getIfAvailable();
+ this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
+ this.sqlSessionFactoryBeanCustomizers = sqlSessionFactoryBeanCustomizers.getIfAvailable();
+ }
+```
+Spring Bean 类型:
+
+1. MybatisProperties
+ 1. parameter.getParameterizedType() == MybatisProperties.class
+2. Interceptor - ObjectProvider
+ 1. parameter.getParameterizedType() == ObjectProvider>
+ 1. rawType = ObjectProvider.class
+ 2. actualTypeParameters =
+ 1. [0] = Interceptor[].class
+3. TypeHandler - ObjectProvider
+ 1. parameter.getParameterizedType() == ObjectProvider>
+ 1. rawType = ObjectProvider.class
+ 2. actualTypeParameters =
+ 1. [0] = TypeHandler[].class
+4. LanguageDriver - ObjectProvider
+5. DatabaseIdProvider - ObjectProvider
+6. ConfigurationCustomizer - ObjectProvider>
+ 1. parameter.getParameterizedType() == ObjectProvider>
+ 1. rawType = ObjectProvider.class
+ 2. actualTypeParameters =
+ 1. [0] = List
+ 1. rawType = List.class
+ 2. actualTypeParameters =
+ 1. [0] = ConfigurationCustomizer.class
+7. SqlSessionFactoryBeanCustomizer - ObjectProvider>
+
+Spring ResovlableType:
+
+1. ResourceLoader
+
+## Bean 作用域
+
+### Singleton Scope Bean
+