public interface BeanFactory {
//用于取消引用FactoryBean实例并将其与FactoryBean 创建的bean区别开来。
// 例如,如果命名的bean myJndiObject是FactoryBean,则get &myJndiObject 将返回工厂,而不是工厂返回的实例
String FACTORY_BEAN_PREFIX = "&";
//返回一个实例,该实例可以是指定bean的共享或独立的。
// 此方法允许使用Spring BeanFactory替代Singleton或Prototype设计模式。对于Singleton Bean,调用者可以保留对返回对象的引用。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
Object getBean(String name) throws BeansException;
//返回一个实例,该实例可以是指定bean的共享或独立的。
// 行为与相同getBean(String),但是如果bean不是必需的类型,则抛出BeanNotOfRequiredTypeException,
// 从而提供了类型安全性的度量。这意味着不能正确投射结果,否则抛出ClassCastException getBean(String)
//将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
//返回一个实例,该实例可以是指定bean的共享或独立的。
// 允许指定显式构造函数自变量/工厂方法自变量,覆盖Bean定义中指定的默认自变量(如果有)。
Object getBean(String name, Object... args) throws BeansException;
//返回与给定对象类型唯一匹配的bean实例(如果有)。
// 此方法进入ListableBeanFactory按类型查找范围,但也可以根据给定类型的名称转换为常规的按名称查找。
// 要在各组Bean之间进行更广泛的检索操作,请使用ListableBeanFactory和/或BeanFactoryUtils。
<T> T getBean(Class<T> requiredType) throws BeansException;
//返回一个实例,该实例可以是指定bean的共享或独立的。
// 允许指定显式构造函数自变量/工厂方法自变量,覆盖Bean定义中指定的默认自变量(如果有)。
// 此方法进入ListableBeanFactory按类型查找范围,但也可以根据给定类型的名称转换为常规的按名称查找。
// 要在各组Bean之间进行更广泛的检索操作,请使用ListableBeanFactory和/或BeanFactoryUtils。
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
// 返回指定bean的提供程序,以允许按需的实例懒惰检索,包括可用性和唯一性选项。
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
//返回指定bean的提供程序,以允许按需的实例懒惰检索,包括可用性和唯一性选项。
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
//这个bean工厂是否包含给定名称的bean定义或外部注册的单例实例?
// 如果该工厂是分层工厂,则将询问任何父工厂,如果在该工厂实例中找不到该bean。
// 如果找到与给定名称匹配的bean定义或单例实例,则该方法将返回true指定的bean定义在范围上是具体的还是抽象的,
// 懒惰的或渴望的。因此,请注意,true 此方法的返回值不一定表示getBean(java.lang.String) 它将能够获取相同名称的实例。
boolean containsBean(String name);
//该bean是共享单身吗?也就是说,将getBean(java.lang.String)始终返回相同的实例吗?
// 注意:此方法返回false不会明确指示独立实例。它指示非单实例,也可以对应于作用域Bean。使用该isPrototype(java.lang.String)操作显式检查独立实例。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//将getBean(java.lang.String)始终返回独立的实例
// 注意:此方法返回false不能清楚地表明一个单例对象。它指示非独立实例,该实例也可能对应于作用域Bean。使用该isSingleton(java.lang.String)操作可显式检查共享的单例实例。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
//检查具有给定名称的Bean是否与指定的类型匹配。更具体地说,检查getBean(java.lang.String)给定名称的调用是否会返回可分配给指定目标类型的对象。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
//检查具有给定名称的Bean是否与指定的类型匹配。更具体地说,检查getBean(java.lang.String)给定名称的调用是否会返回可分配给指定目标类型的对象。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
//确定具有给定名称的bean的类型。更具体地说,确定getBean(java.lang.String)将为给定名称返回的对象的类型。
// 对于a FactoryBean,返回FactoryBean创建的对象的类型(由公开)FactoryBean.getObjectType()。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
//确定具有给定名称的bean的类型。更具体地说,确定getBean(java.lang.String)将为给定名称返回的对象的类型。
// 对于a FactoryBean,返回FactoryBean创建的对象的类型(由公开)FactoryBean.getObjectType()。如果没有早期类型信息可用allowFactoryBeanInit,则取决于 标志,这可能导致先前未初始化的初始化FactoryBean。
// 将别名转换回相应的规范bean名称。 将询问父工厂是否在该工厂实例中找不到该bean。
@Nullable
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
//返回给定bean名称的别名(如果有)。
// 在getBean(java.lang.String)调用中使用时,所有这些别名都指向同一个bean 。
// 如果给定名称是别名,则将返回相应的原始bean名称和其他别名(如果有),原始bean名称是数组中的第一个元素。
// 将询问父工厂是否在该工厂实例中找不到该bean。
String[] getAliases(String name);
}