public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String var1) throws BeansException;
<T> T getBean(String var1, Class<T> var2) throws BeansException;
<T> T getBean(Class<T> var1) throws BeansException;
Object getBean(String var1, Object... var2) throws BeansException;
<T> T getBean(Class<T> var1, Object... var2) throws BeansException;
boolean containsBean(String var1);
boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
String[] getAliases(String var1);
}
BeanFactory是最原始也是最重要的IOC容器,他主要为DI(依赖注入)提供支持。我们的BeanFactory接口,定义了一系列的接口方法,可以使不同的Bean检索方法方便的从IOC容器获取bean。所以这些方法为最基本的容器入口。
废话不多说,分析源码:
String FACTORY_BEAN_PREFIX = "&";
在此我们需要区分一个概念,bean与FactoryBean是不一样的,FactoryBean不是简单的bean,是一个能生产或修饰对象生成的工厂的bean,他的实现与设计模式中的工厂模式与修饰器模式类似。当我们直接通过FactoryBean的ID从BeanFactory中获取的对象实际上是由FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果想获得此FactoryBean对象,就请在ID前加一个&符号来获取。此转义字符“&”用来引用实例,或者把他与工厂产生的bean分开。
Object getBean(String var1) throws BeansException;
<T> T getBean(String var1, Class<T> var2) throws BeansException;
<T> T getBean(Class<T> var1) throws BeansException;
Object getBean(String var1, Object... var2) throws BeansException;
<T> T getBean(Class<T> var1, Object... var2) throws BeansException;
此为五种不同形式获取bean实例的方法。
boolean containsBean(String var1);
帮助开发人员判断IOC容器中是否包含有指定名字的bean。
boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
查询指定名字的bean是否为Singleton、Prototype类型的,这两种类型可以在BeanDefinition设定。
boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
查询指定名字的bean的class类型是否是特定的Class类型。
Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
查询知道bean的Class类型。
String[] getAliases(String var1);
查询指定bean的所有别名,都在BeanDefinition设定的。