BeanFactory详解(源码阅读笔记)
- 位置Location
- 意图Intention
- 实用Usage
- 关联Relation
- 层次Hierarchical
- 积累Dot
- 问题Problem
1. 位置Location
package org.springframework.beans.factory;
public interface BeanFactory {}

2.意图Intention
- 提供访问Bean容器的根接口,按照客户端视图ClientView来设计,即从客户端访问(调用)的角度来设计;
- 可以记为“兵工厂”。里面的每一个Bean,都可以通过name来获取;
- 接近于提供给应用组件集中注册、集中配置;
3.使用Usage
提供的都是查询接口:
- 根据Bean名称获取一个Bean对象;
- 根据Bean名称、Bean的类型、所需参数Optional,返回一个匹配的对象;如果有传递参数的话,可以显式指定参数名;
- 断言:是否包含Bean,是否为SingleTon,是否为Prototype;
- 返回Bean的别名。如果给的是一个别名,那么第一个返回值是原名。按照继承层次查找。
- 返回Bean的类型。
- 判断类型是否匹配。
4.关联Relation
- BeansException。Bean的异常基类
- NoSuchBeanDefinitionException。如果找不到Bean,或者Bean不唯一
- BeanDefinitionStoreException。找不到匹配的Bean定义
- BeanNotOfRequiredTypeException。与需要的Bean的类型不匹配
5.层次Hierarchical

- HierarchicalBeanFactory。树形层次。
- ListableBeanFactory。列表式查询接口。
- AutowireCapableBeanFactory。自动注入的接口。
- SimpleJndiBeanFactory。基于Jndi的接口。
6.积累Dot
- @Nullable(org.springframework.lang),方法、参数、类型参数、字段,可为空标记。
- @NonNullApi,不可为空。
7.问题Problem
- Spring中Prototype design pattern是怎么设计的?
- FactoryBean又是一个什么梗?
- Class
?Class<?>? - Bean的别名?以及模型?别名与原名的叫法以及唯一性映射关系?别名转化机制?
- ResolvableType?
- Jndi?