`

Spring资源加载

 
阅读更多

1、spring中访问资源
          spring通过Resource接口实现资源的访问,针对不同的资源,涉及了不同的实现。
          接口的主要方法:

  exists():   判断资源是否存在
  isOpen(): 判断资源是否已经打开
  getURL():
  getFile():
  getInputStream():

 

 

 

 接口的主要实现:

 

ByteArrayResource:           二进制数组表示的资源
ClassPathResource:         类路径下的资源
FileSystemResource:       文件系统资源,通过文件路径读取
InputStreamResource:
ServletContextResource: 读取相对于web应用根目录的路径的资源
UrlResource:                       读取web服务器或者ftp服务器上的资源

 

 读取资源时,默认采用系统编码读取资源文件,可以通过EncodedResource对资源进行编码:

 

Resource resource=new ClassPathResource("");
EncodedResource encodedRes=new EncodedResource(resource,"UTF-8");
String content=FileCopyUtils.copyToString(encodedRes.getReader())

 2、spring加载资源
              配置前缀:

classpath:    从类路径中加载资源,
classpath*:  所有包含指定包名的路径
file:     使用URLResource从文件系统目录中装载资源,相对或绝对路径   file:/conf/beans.xml
http:// 使用URLResource从web服务器中装载资源   http://www.xxx.com/resources/beans.xml
ftp://  使用URLResource从ftp服务器装载资源
无前缀:  根据ApplicationContext的具体实现类采用对应类型的resource

  匹配符: 

 

 ?: 匹配文件名中的一个字符
 *: 匹配文件名中的任意个字符
 **:匹配多层路径

 

 

3、BeanFactory和ApplicationContext
    
        BeanFactory是spring框架的基础设施,面向spring本身;
       ApplicationContext面向使用spring框架的开发者,几乎所有的应用场合我们都直接使用ApplicationContext而非底层的BeanFactory!
        通过BeanFactory启动ioc容器时,并不会初始化配置文件中定义的bean,初始化动作发生在第一次调用时。对于单实例bean来说,BeanFactory会缓存bean实例,再次调用时直接从ioc容器的缓存中获取bean实例。
   
       WebApplicationContext是为web应用准备的,扩展了ApplicationContext。通过它可以实现web应用上下文和web容器的上下文互访。
 BeanFactory
ResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
Resource res=resolver.getResource("classpath:com/beans.xml");
BeanFactory bf=new XmlBeanFactory(res);
...bf.getBean("xxx");
 ApplicationContext
//从类路径加载配置
ApplicationContext context=new ClassPathXmlApplicationContext("com/beans.xml");
//从文件系统路径加载配置   相对或绝对
ApplicationContext context=new FileSystemXmlApplicationContext(com/beans.xml");
ApplicationContext context=new FileSystemXmlApplicationContext(new String[]{"com/beans.xml","com/beans2.xml");
//注解方式  @Configuration表示是一个配置信息提供类  @Bean定义一个bean
ApplicationContext context=new AnnotationConfigApplicationContext(Beans.class);
 
WebApplicationContext
ServletContext servletContext=ServletActionContext.getRequest().getSession().getServletContext();
//this.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils. getWebApplicationContext( servletContext);
spring中获取ServletContext
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();    
ServletContext servletContext = webApplicationContext.getServletContext();  
 
 
WebApplicationContext初始化需要ServletContext实例,就是说必须要有web容器。方式是通过在web.xml中配置自启动的servlet或者监听器。
<!-- 指定spring配置文件位置-->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
       /WEB-INF/a.xml,/WEB-INF/b.xml
  </param-value>
</context-param>
<!-- 指定log4j配置文件位置,WebApplicationContext需要使用日志功能,必须在装载spring之前装载log4j-->
<context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>
       /WEB-INF/log4j.properties
  </param-value>
</context-param>
<!--方式一,自启动servlet  低版本的web容器不支持listener启动,应选择该方式-->
<servlet>
  <servlet-name>log4jConfigServlet</servlet-name>
  <servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
  <servlet-name>springContextLoaderServlet</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>
<!--方式二,web容器监听启动-->
<servlet>
  <servlet-name>log4jConfigServlet</servlet-name>
  <servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
 
 bean的作用域

singleton作用域:
                <bean id="" class="" singleton="true"/>         
                  spring ioc容器中只存在一个bean的实例。
prototype作用域:
                  <bean id="" class="" scope="prototype"/>
                  每次对该bean进行请求时,都会创建一个新的bean实例。
                   prototype作用域的任何bean,spring容器负责进行初始化、配置、装饰或者装配完一个实例后,就不闻不问了。
                   资源释放由客户端代码负责,spring容器不会调用相应处理来释放资源。
request作用域:
                  <bean id="" class="" scope="request"/>          
                  每次请求创建一个实例,该实例仅在当前HTTP request内有效。
session作用域:
                   <bean id="" class="" scope=""/>                 
                  实例仅在当前HTTP session内有效。
 
分享到:
评论

相关推荐

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring IoC加载流程讲解

    Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...

    Spring的经典面试题

    ### Spring资源加载 #### 20. FileSystemResource与ClassPathResource的区别 - **FileSystemResource**:用于访问文件系统上的资源。 - **ClassPathResource**:用于访问类路径下的资源,通常用于访问位于jar包或...

    spring加载

    前者是最基础的bean工厂,而ApplicationContext不仅包含了BeanFactory的功能,还添加了资源加载、消息解析、事件发布等功能,更适合企业级应用。 三、Bean的生命周期 1. **实例化**:Spring通过反射或CGLIB动态...

    spring加载restful(文档+程序源码).zip

    《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...

    Spring Boot 全局懒加载机制.docx

    Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...

    Spring中使用classpath加载配置文件浅析

    如果存在同名的配置文件,但位于不同的位置,根据Spring加载类路径资源的策略,可能会加载到一个错误的文件。为了避免这种情况,开发者需要仔细设计自己的目录结构,并确保配置文件的命名和位置唯一,以避免冲突。 ...

    Spring+mvc+mybatis Mapper xml自动加载

    首先,我们需要确保Spring和MyBatis的配置文件正确设置了资源加载路径。例如,在Spring的配置文件中,通常会有如下配置: ```xml &lt;bean id="mybatisSqlSessionFactory" class="org.mybatis.spring....

    加载spring 文件,在web.xml中的配置

    当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `&lt;listener&gt;`标签...

    spring osgi相关资源

    3. 依赖管理:OSGi容器负责管理Bundle间的依赖关系,避免类加载冲突,确保正确版本的类被加载。 二、Spring DM (Deployment Manager) 1. Spring DM是Spring对OSGi服务的扩展,提供了一种声明式的方式来管理OSGi ...

    加载jar包中的spring配置文件

    当我们构建一个基于Spring的应用时,经常需要从jar包中加载配置文件,以便管理依赖注入和其它服务。在Spring中,我们通常使用`classpath:`或`classpath*:`前缀来指定资源的位置。这两个前缀在处理多个类路径位置时有...

    spring5资源.zip

    - spring-context.jar:ApplicationContext容器,包含事件发布、资源加载、国际化等功能。 - spring-beans.jar:Bean工厂和bean定义相关。 - spring-aop.jar:AOP模块,实现切面编程。 - spring-aspects.jar:对于...

    spring框架所需要加载库合集

    首先,需要将`spring-framework-4.1.6.RELEASE-dist`解压,这个版本的Spring包含了框架的jar文件和其他相关资源。在项目中,引入Spring的核心库`spring-core.jar`,以及`spring-context.jar`以获取Bean管理和AOP支持...

    spring资源文档

    同时,确保在“Order and Export”选项卡中,Spring库被放在JRE System Library之上,这样在运行时,Spring库会优先被加载。 在Spring框架中,我们经常使用到的还有AOP模块,它允许我们定义横切关注点(cross-...

    如何加载jar包中的spring配置文件

    Spring提供了`ClassPathResource`类,可以用来加载类路径下的资源,包括jar包内的文件。例如,如果你的jar包名为`mylib.jar`,配置文件为`myconfig.xml`,你可以这样加载: ```java Resource resource = new Class...

    spring 启动时加载不同的文件

    ### Spring启动时根据配置文件加载不同文件的知识点详解 #### 一、背景介绍 在实际的应用开发中,根据运行环境的不同(例如开发环境、测试环境、生产环境等),应用程序往往需要连接不同的数据库或其他资源。为了...

    Spring 加载多个配置文件

    `ApplicationContext` 是 Spring 的核心接口之一,用于提供Bean的生命周期管理和资源访问服务。它可以通过以下两种常见实现类来加载多个配置文件: - `ClassPathXmlApplicationContext`:从类路径(CLASSPATH)中...

    spring boot中配置mybatis热加载.zip

    下面将详细介绍如何在Spring Boot中配置MyBatis以实现XML资源文件的热加载。 首先,我们需要在Spring Boot项目的`pom.xml`或`build.gradle`文件中添加MyBatis和其Spring Boot starter的依赖。如果是Maven项目,添加...

    spring源码包.zip

    `spring-context`还支持AOP(面向切面编程)、事件传播、国际化以及资源加载等功能。 `spring-webmvc`模块则是Spring MVC(Model-View-Controller)的实现,是Web应用的核心组件。它处理HTTP请求,通过...

Global site tag (gtag.js) - Google Analytics