spring学习(三)—beanFactory
1. spring的容器
spring提供了两种容器类型:BeanFactory与ApplicationContext,类的继承情况如下:
1.1 BeanFactory
基类的ioc容器,是最基本的抽象工厂,提供完整的IOC服务支持,默认是采用延迟初始化策略(lazy-load),即当客户端对象需要访问容器中某个对象的时候,才对该对象进行初始化以及依赖注入操作。所以容器的启动速度很快。
1.2 ApplicationContext
间接继承了BeanFactory,除了拥有BeanFactory的所有支持,ApplicationContext还提供了其他的高级特性,如:事件发布、国际化信息支持等。在容器启动后,它所管理的对象默认全部初始化并绑定完成。
2.浅析BeanFactory
先看看其源码:
public interface BeanFactory { //使用转义符&来得到FactoryBean本身,用来区分通过容器获得FactoryBean本身和其产生的对象 String FACTORY_BEAN_PREFIX = "&"; //这个方法是BeanFactory的主要方法,通过这个方法,可以取得IOC容器管理的Bean, //Bean的取得是通过指定名字索引获取的 Object getBean(String name) throws BeansException; //根据bean的名字和Class类型来得到bean实例,增加了类型安全验证机制 <T> T getBean(String name, Class<T> requiredType) throws BeansException; //通过Bean类型获取bean实例 <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; //判断容器是否含有指定名字的bean boolean containsBean(String name); //查询指定名字的Bean是不是单例的Bean boolean isSingleton(String name) throws NoSuchBeanDefinitionException; //判断Bean是不是prototype类型的bean boolean isPrototype(String name) throws NoSuchBeanDefinitionException; //查询指定了名字的Bean的Class类型是否与指定类型匹配 boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException; //获取指定名字bean的Class类型 Class<?> getType(String name) throws NoSuchBeanDefinitionException; //查询指定了名字的bean的所有别名,这些别名都是在BeanDefinition中定义的 String[] getAliases(String name); }
上面的代码基本都是查询相关的方法,通常情况下,只有主入口类才会跟容器的API直接耦合。BeanFactory是接口类,定义了IOC容器所应该遵守的最基本服务规范。如间接继承实现BeanFactory接口的DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,就像容器附加了某些功能的实现。
浙公网安备 33010602011771号