一:类装载器
加载class文件到JVM-》验证正确性(分配内存空间)-》初始化(静态变量初始化静态代码初始化)。
jvm启动时会加载3个装载器:根装载器(c++编写看不到加载jre核心库),extclassloader(加载jre扩展目录下的jar),appclassloader(应用程序类的加载,我们使用的),从上到下是父子关系。
资源操作接口resource方法:
exists():资源释是否存在
isopen():是否打开
getURL() 如果资源可以用URL表示,则防范对应URL
getFile()如果资源对应一个文件,返回该对应的File对象
getInputStream() 返回资源输入流
实现该接口的常用类有:ByteArrayResource,InputStreamResource,ClassPathResource,ServletContextResource,UrlResource,PathResource,FileSystemResource。其中PathResource,FileSystemResource可以写数据到文件中。对于远程如http,ftp资源可以使用URLResource
注意:当资源是一个文件的时候使用打包的方式把文件打包到jar中然后在通过getfile方式返回file对象会报错,使用getInputStream则可以成功。
资源加载器ResourceLoader,它依赖Resource接口,对采集到的数据进行加载。它简化了对资源的获取时显示的调用Resource的实现类,ResourceLoader可以根据传入的资源标识确定去调用具体的那个Resource的实现类。目前ResourceLoader有2个子实现类:ResourcePatternResolver和PathMatchingResourcePatternResolver。这2个类支持传入的资源地址参数正则表达式方式,可以返回一个资源Resourced的集合。
beanFactory(IOC容器)面向spring本身,applicationContext(应用上下文或者spring容器)面向开发者,后者继承于前者。
applicationContext:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicationContext,还有后续的web方面的ApplicationContext。基于注解的applicationContext是AnnotationConfigpplicationContext,基于Groovy方式的applicationContext是GenericGroovyApplicationContext。
在web应用中,web应用上下文(webApplicationContext)作为一个属性放在ServletContext中,可以使用工具类webApplicationContextUtils方法获取:
getwebApplicationContext(ServletContext sc)。
WebApplicationContext applicationContext=servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
同时WebApplicationContext 也可以通过getservletContext获取servletContext。
WebApplicationContext 启动与beanFactory、applicationContext启动方式不一样,它需要servletContext实例依赖。也就是他的启动需要web容器。
要启动WebApplicationContext 可以借助web.xml中配置的servlet或者servletContextListener。spring提供了启动该容器的对应类
org.springframework.web.context.ContextLoaderListener和org.springframework.web.context.ContextLoaderServlet
spring对于容器可以设置子容器,子容器可以访问父容器的bean,反过来就不行。成功案例:spring创建springmvc子容器,在业务层和数据层创建一个父容器,这样前端可以访问后端的父容器,而后端不能访问前端容器的bean。