Spring类分析
BeanFactory
遗留问题
这边的getbeanProvider是干嘛的?不是有getBean了么,为什么还要有getbeanProvider
上面部分方法里有参数ResolvableType ,这个是什么,和其他的区别在哪里?
public interface BeanFactory {
//区分factoryBean和普通bean,举个例子:如果myBean是个factoryBean,那么get &myBean将获得这个工厂实例,而不是这个工厂返回(创造)的bean。
String FACTORY_BEAN_PREFIX = "&";
//返回这个bean一个共享或者独立的实例。这个方法允许springfactory替换单例或者多例模式。调用可以持有在单例模式下返回的对象。将别名转换回对应的规范名称。如果这个工厂不能创建,将会查找他的父工厂。
Object getBean(String name) throws BeansException;
//针对特定bean返回一个实例,可能是共享的或者独立的。和getbean(name)功能类似。但是如果这个bean 不是要求的类型,通过抛出BeanNotOfRequiredTypeException 异常提供一种类型安全的校验。这意味着像可能在getbean(name)后强转结果时发生的ClassCastException不会发生。将别名转换为对应的规范bean名称。
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
//允许指定显示构造函数和工厂方法参数来bean定义中的默认参数(如果有)。
//name:检索这个bean需要的名字
//args:创造bean实例的用的显式参数(仅仅当创建新实例而不是获取已有的时候要用到)
Object getBean(String name, Object... args) throws BeansException;
//如果有的话,返回唯一匹配给定类型的bean实例。
//这个方法通过ListableBeanFactory 按照类型查找,也可以基于给定类型的名字转化为正式的按名字查找。更多针对bean集合的检索操作,可以查看ListableBeanFactory和BeanFactoryUtils
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
//为指定bean提供一个provider,允许延迟按需检索,包含可用性和唯一性选项。
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
//类型bean必须匹配;可以是泛型类型声明。请注意,与反射注入点相比,此处不支持集合类型。要以编程方式检索与特定类型匹配的bean列表,请在此处和随后将实际bean类型指定为参数
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}