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等,就像容器附加了某些功能的实现。

 

posted on 2018-01-29 21:18  dfsgfsgsg  阅读(220)  评论(0)    收藏  举报

导航