在Spring中我们经常使用另一种容器ApplicationContext,较之BeanFactory,它进一步扩展了BeanFactory基本容器的功能,包括BeanFactoryPostProcessor,BeanPostProcessor以及特殊类型bean自动识别。容器启动后Bean实例自动初始化、国际化支持、Bean容器内事件发布等。
常用的ApplicationContext实现类:
FilesSystemXmlApplicationContext:从文件系统加载bean定义及相关资源
ClassPathXmlApplication:从ClassPath 中的xml加载Bean定义及相关资源
XmlWebApplicationContext:专为Web程序定制的实现
一、统一加载策略
1、Resource接口可以根据资源存在的不同类型,不同场合进行访问。较为常用的有classPathResource,FileSystemResource,UrlResource
2、ResourceLoader用来定位和查找资源:默认实现类DefaultResourceLoader 及针对文件系统的FileSystemLoader[返回的也是FileSystemResouce]
3、ResourcePartternResolver扩展ResourceLoader,根据资源路径的匹配模式,可以批量获取Resource,常用的实现类PathMatchingResourcePatternResolver(在构造时需传入一个ResourceLoader,如不传入则采用默认的DefaultResourceLoader)
二、ApplicationContext
ApplicationContxet继承了ResourcePartternResolver接口,AbstractApplicationContext继承了DefaultResourceLoader ,ApplicationContext又将自己作为参数实现了ResourcePartternResolver批量获取资源的方法。因此ApplicationContext就是一个ResouceLoader(ResourcePatternResolver)
三、ApplicationContext事件发布_
Spring事件继承自java.util.EvenObject,spring提供了三种实现:
①ContextColosedEvent:容器在关闭时发布的事件类型
②ContextRefreshedEvent:容器在初始化或更新时发布的事件类型:web请求处理后发布的事件类型
③RequestHandledEvent:Web请求处理后发布的事件
当然,还可以自定义容器事件,只需自定义事件继承ApplicationContextEvent类,事件处理器实现ApplicationListener接口,并将它们注入到Spring容器中,使用容器的publishEvent方法进行发布
网友评论