spring IoC学习 ------IoC容器:ApplicationContext
ApplicationContext作为比BeanFactory更加先进的IoC容器的实现,除了对支持BeanFactory原有的功能之外,还扩展了包括BeanFactoryPostProcessor,BeanPostProcessor以及其他特殊类型bean的自动识别,容器启动后bean实例的自动初始化,国际化的信息支持,容器内事件发布等。
ApplicationContext类型容器提供的集中实现:
- FileSystemXmlApplicationContext:从文件中加载bean定义以及相关资源的ApplicationContext实现。
- ClassPathXmlApplicatonContext:从Classpath加载bean定义以及相关资源的Applicationcontext的实现。
- XmlWebApplicationContext:用于web应用程序的ApplicationContext的实现。
ApplicationContext的特有功能:
- 统一资源加载策略:一套基于core.io.Resource和core.io.ResourceLoaderk接口的资源抽象和加载策略。spring框架内部使用core.io.Resource接口作为所有资源的抽象和访问接口,有一下几种实现:
ByteArrayResource:将字节数组提供的数据作为以这种资源进行封装
ClassPathResource:实现从java应用程序的ClassPath中家挨具体资源并进行封装,可以使用指定的类加载器(ClassLoader)或者给定的内进行资源加载。
FileSystemResource:对java.io.File进行封装,可以以文件或者URL的心事对象该类型资源进行封装。
URLResource:通过java.net.URL进行的具体资源查找定位的实体类,内部委派URL进行具体的资源操作
InputStreamResource:将给定的InputStream视为一种资源的Resource实现类,较为少用
ResourceLoader:是资源查找定位策略统一抽象,具体的资源查找定位策略则由相应的ResourceLoader实现类 给出。
core.io.DefaultResourceLoader:默认资源查找逻辑。步骤为:
(1)首先检查资源路径是否以classpath:前缀打头,如果是,构造ClassPathResource类型资源并返回。
(2)若(1)不成功,(a).尝试通过URL,根据资源路径定位资源。构造UrlResource类型的资源并返回。
(b)若不是URL,这使用getResourceByPath(String) 方法来定位,构造ClassPathResource类 型并返回
core.io.FileSystemResourceLoader:继承了DefaultResourceLoader但是覆盖了 getResourceByPath(String)
ResourcePatternResolver:批量查找的ResourceLoader
ApplicationContext继承了ResourcePatternResolver,间接实现了ResourceLoader接口,所以每个ApplicationContext实现都可以看做一个ResourceLoader或者ResourcePatternResolver。