BeanFactory和ApplicationContext

BeanFactory是一个类的通用工厂,可以创建并管理各种类的对象

beanFactory主要的方法就是getBean,其他功能都是通过其他接口得到不断扩展。
ListableBeanFactory: 该接口定义了访问容器中Bean基本信息的若干方法,如查看Bean的个数、获取某一类型Bean的配置名、查看容器中是否包括某一Bean等。
HierarchicalBeanFactory:父子级联IoC容器的接口,子容器可以通过接口方法访问父容器。
ConfigurableBeanFactory:这是一个重要的借口,增强了IOC容器的可定制性。塌地你故意了设置类装载器。属性编辑器、容器初始化后置处理器等方法。
AutowireCapableBeanFactory:定义了将容器中的Bean按照=某种规则进行自动装配的方法。
SingletonBeanRegistry:定义了允许在运行期向容器注册单实例Bean的方法。
BeanDefinitionRegistry:Spring配置文件中每一个<bean>节点元素在Spring容器里都通过一个BeanDefinition对象表示,它描述了Bean的配置信息。而BeanDefinition Registry接口提供了向容器手工注册BeanDefinition对象的方法
 
初始化BeanFactory:
    XmlBeanDefinitionReader通过Resource装载Spring配置信息并启动IoC容器,然后通过BeanFactory.getBean方法从IoC容器中获取Bean。BeanFactory启动Ioc容器时,并不会初始化配置文件中定义的Bean,初始化动作发生在第一个调用时,对于单实例的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean()获取Bean时,将直接从IoC容器的缓存中获取Bean实例。
    Spring在DefaultSingletonBeanRegistry类中提供了一个用于缓存单实例Bean的缓存器,它是一个用HashMap实现的缓存器,但实力的Bean以beanName为键保存在这个HashMap中。
ApplicationContext:
ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动时间、关闭事件等。实现了ApplicationListener事件监听接口的Bean可以接收到容器事件,并对事件进行相应处理。在AplicationContext抽象实现类AbstractApplicationContext中存在一个ApplicationEventMulticaster,它负责保存所有的监听器,以便在容器产生上下文事件时通知这些事件监听者。
MessageSource:为应用提供il8n国际化消息访问的功能。
ResourcePatternResolver:所有ApplicationContext实现类都实现了类似于PathMatchingResourcePatternResolver的功能,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件。
LifeCycle:该接口共识被ApplicationContext实现及具体Bean实现,ApplicationContext会将start/stop 的信息传递给容器中所有实现了该接口的Bean,以达到管理和控制JMX、任务调度等面对。
 
ConfigurableApplicationContext 扩展与ApplicationContext,它新增了两个主要的方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭应用上下文的能力。
 
ApplicationContext的初始化和BeanFactory有一个重大的缺别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例化目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间回避BeanFactory稍长一些

猜你喜欢

转载自www.cnblogs.com/gqymy/p/9216674.html