在Spring IOC容器的设计中,可以看到两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器的最基本功能;另一个是ApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。
1 BeanFactory
1.1 BeanFactory的应用场景
BeanFactory接口的第一行有这样一段代码
<span style="font-size:18px;">String FACTORY_BEAN_PREFIX = "&";</span>
它定义了一个转义字符“&”,用来区分通过容器获取FactoryBean产生的对象和获取FactoryBean本身。例如,myFactory是一个FactoryBean,那么使用“&myFactory”得到的是FactoryBean,而不是myFactory产生的对象。
这BeanFactory接口中,定义了如下方法:
- BeanFactory接口设计了getBean方法,这个方法是使用IoC容器API的主要方法,通过这个方法,可以取得IoC容器中管理的Bean,Bean的取得是通过指定名字来索引的。如果需要在获取Bean时对Bean的类型进行检查,BeanFactory接口定义了带有参数的getBean方法,这个方法的使用与不带参数的getBean方法类似,不同的是增加了对Bean检索的类型的要求。
Object getBean(String name) throws BeansException; <T> T getBean(String name, Class<T> requiredType) throws BeansException; <T> T getBean(Class<T> requiredType) throws BeansException; Object getBean(String name, Object... args) throws BeansException; <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
- 通过接口方法containsBean让用户能够判断容器是否含有指定名字的Bean。