类图:
一.注解
The root interface for accessing a Spring bean container.
BeanFactory:是获取IOC容器的根接口,提供了IoC容器所应该遵循的最基本的服务契约。
IoC容器实际上代表一系列功能各异的容器产品,是容器的功能有大有小,有各自的特点,但要满足一些基本特性,BeanFactory就定义了那些最基本的特性,因此可以说Spring中所有的容器实现追根溯源都实现了BeanFactory。
二.参数
String FACTORY_BEAN_PREFIX = "&";
用户使用容器时,可以使用转义符&来得到FactoryBean本身, 用来区分通过容器获取产生的对象和获取FactoryBean本身。
对FactoryBean转义的定义,因为如果使用bean名字检索FactoryBean得到的对象是工厂生成的对象,如果需要得到工厂本身,需要转义。
BeanFactory和FactroyBean之间的区别:
BeanFactory是IoC容器或对象工厂,FactoryBean是bean,但不是简单的bean,而是能产生bean的bean,是一个能产生或修饰对象生成的工厂Bean。
具体代码中的实例:
(待补充)
三.方法
主要定义了一些获取bean、判断bean是否存在、判断bean的属性、判断bean的类型、获取bean的别名的方法。
1.Object getBean(String name) throws BeansException;
这个方法是使用IoC容器API的主要方法,通过这个方法,可以取得IoC容器中管理的bean,bean的取得是通过指定名字来索引的。
2.<T> T getBean(String name, Class<T> requiredType) throws BeansException;
如果需要在获取bean时对bean的类型进行检查,使用这个方法,与上面那个getBean类似,不同的是增加了对Bean检索的类型的要求。
3.boolean containsBean(String name);
让用户判断容器是否含有指定名字的Bean
4.boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
查询指定名字的Bean是否是Singleton类型的Bean。对于Singleton属性,用户可以在BeanDefinition中指定。
5.boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
查询指定名字的Bean是否是prototype类型的,与Singleton属性一样,这个属性也可以由用户在BeanDefinition中指定。
6.
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
查询指定了名字的Bean的Class类型是否是特定的Class类型。这个Class类型可以由用户来指定。
7.
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
查询指定名字的Bean的Class类型。
8.String[] getAliases(String name);
查询指定名字的鹅Bean的所有别名,这些别名都是用户在BeanDefinition中定义的。
四.具体的实现有哪些
常用的有:
1.DefaultListableBeanFactory:
包含了基本IoC容器所具有的重要功能,在Spring中,实际上是把DefaultListableBeanFactory作为一个默认的功能完整的IoC容器来使用的。
2.XmlBeanFactory:
继承了DefaultListableBeanFactory的同时,增加了新功能:可以读取以XML文件方式定义的BeanDefinition。在XmlBeanFactory中初始化了一个XmlBeanDefinitionReader对象,由它来对XML形式的信息进行处理。
3......