DefaultListableBeanFactory
首先是继承图
BeanFactory最基础的bean生产工厂的主要实现功能
String FACTORY_BEAN_PREFIX = "&";
//根据name获取一个bean对象
Object getBean(String name) throws BeansException;
//根据name和requireType指定的类型获取指定的bean实例
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
//根据name和args参数获取bean实例,注意:args是bean的构造器的参数
Object getBean(String name, Object... args) throws BeansException;
//根据requireType类型获取bean,也可能使用Type的名字获取bean
<T> T getBean(Class<T> requiredType) throws BeansException;
//根据类型和构造器参数获取bean
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
//获取一个requireType类型的bean的封装对象,可以进行后续复杂的操作
//如根据参数实例化一个bean,对于匹配了多个bean的情况,可以进行stream()
//操作排除NullBean,或者是对多个匹配的bean进行排序
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
//检查工厂是否包含name对应的bean或者有无单例bean
boolean containsBean(String name);
//判断bean的实例化模式是否是singleton单例模式
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//判断bean的实例化模式是否是prototype
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
//检查name对应的bean与typeToMatch对应的类型是否一致
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
//检查name对应的bean与typeToMatch对应的类型是否一致
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
@Nullable
//根据name查找对应的bean的类型
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);//获取name对应的bean的别名,就是外号
BeanObjectProvider的一个实现类
public <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType) {
return new BeanObjectProvider<T>() {
@Override
public T getObject() throws BeansException {
T resolved = resolveBean(requiredType, null, false);
if (resolved == null) {
throw new NoSuchBeanDefinitionException(requiredType);
}
return resolved;
}
@Override
public T getObject(Object... args) throws BeansException {
T resolved = resolveBean(requiredType, args, false);
if (resolved == null) {
throw new NoSuchBeanDefinitionException(requiredType);
}
return resolved;
}
@Override
@Nullable
//当无法获取时返回null
public T getIfAvailable() throws BeansException {
return resolveBean(requiredType, null, false);
}
@Override
@