Spring -- by name 和 by type
2019-03-13 本文已影响0人
qiyinger
/** by name注入的bean key为name, value 为BeanDefinition */
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
/** by type注入(包括单例) key为bean的类型, value 为相应类型的所有bean的name数组 */
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);
/** by type注入 单例*/
/** Map of singleton-only bean names, keyed by dependency type. */
private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<>(64);
这是BeanFactory中存储BeanDefinition的Map,Spring 是默认进行by type 自动注入的,所以当同一类型的BeanDefinition有多个时,是无法确定是哪一个BeanDefinition的,需要通过by name的方式注入