1)Spring中的应用上下文
BeanFactory
BeanFactory接口,常用的实现类为:XmlBeanFactory。
ApplicationContext
ApplicationContext接口,该接口继承BeanFactory接口,比较常用。
其中比较常用的实现有:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
WebApplicationContext
该接口继承自ApplicationContext,应用于Spring的Web环境中。
2)Spring中几种特殊的bean接口
a)BeanFactoryAware接口,让Bean获取Spring容器。
b)ApplicationContextAware接口,作用同上。
c)BeanNameAware接口,获得Bean本身的id。
d)InitializingBean接口,依赖注入后的行为。
e)DisposableBean接口,Bean销毁之前的行为。
如果一个Bean实现了上面所有的接口,且配置如下:
则从该Bean初始化到销毁的过程中,所执行的方法依次为:
- 构造方法
- BeanNameAware接口的方法
- BeanFactoryAware接口的方法
- ApplicationContextAware接口的方法
- InitializingBean接口的方法
- init()方法
- DisposableBean接口方法
- close()方法
3)ApplicationContext的事件机制
如果容器中有个ApplicationListenerBean(实现了ApplicationListener接口的Bean),每当ApplicationContext发布ApplicationEvent(被发布的Bean需要继承ApplicationEvent类)时,ApplicatioinListener Bean将自动被触发。
4)Spring获取BeanFactory
a)实现BeanFactoryAware接口。
b)通过BeanFactoryLocator获取,具体代码如下:
参数说明:beanFactoryLocator为需要加载的xml文件,如果为空,则Spring会自动搜索类路径下的beanRefContext.xml文件,其格式如下:
参数beanFactoryLocatorKey为搜索文件中的id,以上图为例则beanFactoryLocatorkey=”aaa”。
5)SpringBean的实例化时间
a)默认情况下,Spring中bean为单例的,在容器启动时进行实例化。
b)如果将Spring中的bean配置为prototype,则在获取bean时初始化。此后该bean将不由spring容器管理,作为一个普通的对象,用完后由java虚拟机回收。
c)如果在默认情况下,将bean设置为lazy-init=”true”时,则会在第一次使用时实例化。