FileSystemXmlApplicationContext的接口关系
一:基类AbstractApplicationContext继承DefaultResourceLoader,实现ConfigurableApplicationContext,DisposableBean,实现refresh,开始启动容器
1.1:DefaultResourceLoader,是ResourceLoader的默认实现类,用于加载资源,核心源码
其中getResourceByPath是核心方法,当location不是URL模式和ClassPath模式时会使用它,他的默认方法是创建ClassPathContextResource,但它通常会在子类中根据实际情况重写。
1.2DisposableBean的主要作用是定义bean的销毁前操作,只有一个简单的destroy方法。注释1
1.3configurableApplicationContext 与WebApplicationContext一样,是最常用容器接口,refresh方法为容器启动的入口,其接口关系如下图所示
1.3.1 lifecycle接口中只有三个方法,start,stop,isrunning。实现此接口能保证srping在启动容器之后会调用start。结束时调用stop,期间能够轮询
1.3.2Closeable,继承与AutoCloseable,其主要功能是使try语句能够自动执行资源关闭。(只支持jdk1.7以后)
1.3.2ApplicationContext。 这是一个spring的核心接口。他继承于ApplicationEventPublisher(支持事件监听功能,使用了设计模式中的观察者模式。注释2),EnvironmentCapable(注释3),ResourcePatternResolver(继承于ResourceLoader,为了让用户自定义资源加载方式),MessageSource(用于获取国际化资源),HierarchicalBeanFactory(支持获取双亲容器),ListableBeanFactory(继承于beanFactory,该为最原始容器,对容器的基本功能进行简单拓展)
2,AbstractRefreshableApplicationContext,实现了父类中的refreshBeanFactory并创建了DefaultListableBeanFactory,完成资源的加载,与之相同的还有GenericApplicationContext
3AbstractRefreshableConfigApplicationContext,对传入的locations进行解析,核心方法为
4,AbstractXmlApplicationContext完成了对资源的具体加载,文件的形式有很多,此处很明显是加载xml文件。还有很多其他不同的子类实现,
5.FileSystemXmlApplicationContext提供各种构造器,并且重写继承于DefaultResourceLoader的getResourceByPath
DefaultListableBeanFactory的继承关系如下图
1.1 AbstractBeanFactory继承于FactoryBeanRegistrySupport,并且实现ConfigurableBeanFactory接口
1.1.1FactoryBeanRegistrySupport添加工厂方式实现beanfactory的支持。其中继承了SimpleAliasRegistry(实现了AliasRegistry,提供了对别名的管理),实现了SingletonBeanRegistry(支持单例的注册和查询)
1.1.2ConfigurableBeanFactory,继承于HierarchicalBeanFactory(上文提及),和SingletonBeanRegistry,是一个简单的beanfactory.
1.2AbstractAutowireCapableBeanFactory除了继承了AbstractBeanFactory还实现了AutowireCapableBeanFactory,添加了bean的自动装配功能
1.3DefaultListableBeanFactory除了继承AbstractAutowireCapableBeanFactory,还实现了ConfigurableListableBeanFactory(继承了AutowireCapableBeanFactory,ListableBeanFactory,ConfigurableBeanFactory,其中两个接口重复,主要是对简单容器尽心简单拓展,即ListableBeanFactory的功能),BeanDefinitionRegistry(继承于AliasRegistry,该接口主要是为了管理BeanDefinition的别名),Serializable(支持序列化的标记接口)
注释1:bean的销毁前操作和初始化前操作一共有三种方法,1通过注释@PostConstruct @PreDestroy ,2,在xml文件中指定init-method和destory-method,3通过实现接口InitializingBean,DisposableBean
注释2.spring观察者模式
注释3http://www.importnew.com/1099.html