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本身;
BeanFactory是spring框架的基础设施,面向spring本身;
ApplicationContext面向使用spring框架的开发者,几乎所有的应用场合我们都直接使用ApplicationContext而非底层的BeanFactory!
通过BeanFactory启动ioc容器时,并不会初始化配置文件中定义的bean,初始化动作发生在第一次调用时。对于单实例bean来说,BeanFactory会缓存bean实例,再次调用时直接从ioc容器的缓存中获取bean实例。
通过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作用域:
spring ioc容器中只存在一个bean的实例。
prototype作用域:
<bean id="" class="" scope="prototype"/>
每次对该bean进行请求时,都会创建一个新的bean实例。
prototype作用域的任何bean,spring容器负责进行初始化、配置、装饰或者装配完一个实例后,就不闻不问了。
资源释放由客户端代码负责,spring容器不会调用相应处理来释放资源。
request作用域:
每次对该bean进行请求时,都会创建一个新的bean实例。
prototype作用域的任何bean,spring容器负责进行初始化、配置、装饰或者装配完一个实例后,就不闻不问了。
资源释放由客户端代码负责,spring容器不会调用相应处理来释放资源。
request作用域:
<bean id="" class="" scope="request"/>
每次请求创建一个实例,该实例仅在当前HTTP request内有效。
session作用域:
每次请求创建一个实例,该实例仅在当前HTTP request内有效。
session作用域:
<bean id="" class="" scope=""/>
实例仅在当前HTTP session内有效。
实例仅在当前HTTP session内有效。
相关推荐
在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...
Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...
### Spring资源加载 #### 20. FileSystemResource与ClassPathResource的区别 - **FileSystemResource**:用于访问文件系统上的资源。 - **ClassPathResource**:用于访问类路径下的资源,通常用于访问位于jar包或...
前者是最基础的bean工厂,而ApplicationContext不仅包含了BeanFactory的功能,还添加了资源加载、消息解析、事件发布等功能,更适合企业级应用。 三、Bean的生命周期 1. **实例化**:Spring通过反射或CGLIB动态...
《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...
Spring Boot 2.2及更高版本引入了一个全局懒加载机制,允许用户通过配置开启整个应用的bean懒加载,以优化启动时间和资源利用。 在传统的Spring应用中,我们可以通过在bean定义上添加`@Lazy`注解来实现单个bean的懒...
如果存在同名的配置文件,但位于不同的位置,根据Spring加载类路径资源的策略,可能会加载到一个错误的文件。为了避免这种情况,开发者需要仔细设计自己的目录结构,并确保配置文件的命名和位置唯一,以避免冲突。 ...
首先,我们需要确保Spring和MyBatis的配置文件正确设置了资源加载路径。例如,在Spring的配置文件中,通常会有如下配置: ```xml <bean id="mybatisSqlSessionFactory" class="org.mybatis.spring....
当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `<listener>`标签...
3. 依赖管理:OSGi容器负责管理Bundle间的依赖关系,避免类加载冲突,确保正确版本的类被加载。 二、Spring DM (Deployment Manager) 1. Spring DM是Spring对OSGi服务的扩展,提供了一种声明式的方式来管理OSGi ...
当我们构建一个基于Spring的应用时,经常需要从jar包中加载配置文件,以便管理依赖注入和其它服务。在Spring中,我们通常使用`classpath:`或`classpath*:`前缀来指定资源的位置。这两个前缀在处理多个类路径位置时有...
- spring-context.jar:ApplicationContext容器,包含事件发布、资源加载、国际化等功能。 - spring-beans.jar:Bean工厂和bean定义相关。 - spring-aop.jar:AOP模块,实现切面编程。 - spring-aspects.jar:对于...
首先,需要将`spring-framework-4.1.6.RELEASE-dist`解压,这个版本的Spring包含了框架的jar文件和其他相关资源。在项目中,引入Spring的核心库`spring-core.jar`,以及`spring-context.jar`以获取Bean管理和AOP支持...
同时,确保在“Order and Export”选项卡中,Spring库被放在JRE System Library之上,这样在运行时,Spring库会优先被加载。 在Spring框架中,我们经常使用到的还有AOP模块,它允许我们定义横切关注点(cross-...
Spring提供了`ClassPathResource`类,可以用来加载类路径下的资源,包括jar包内的文件。例如,如果你的jar包名为`mylib.jar`,配置文件为`myconfig.xml`,你可以这样加载: ```java Resource resource = new Class...
### Spring启动时根据配置文件加载不同文件的知识点详解 #### 一、背景介绍 在实际的应用开发中,根据运行环境的不同(例如开发环境、测试环境、生产环境等),应用程序往往需要连接不同的数据库或其他资源。为了...
`ApplicationContext` 是 Spring 的核心接口之一,用于提供Bean的生命周期管理和资源访问服务。它可以通过以下两种常见实现类来加载多个配置文件: - `ClassPathXmlApplicationContext`:从类路径(CLASSPATH)中...
下面将详细介绍如何在Spring Boot中配置MyBatis以实现XML资源文件的热加载。 首先,我们需要在Spring Boot项目的`pom.xml`或`build.gradle`文件中添加MyBatis和其Spring Boot starter的依赖。如果是Maven项目,添加...
`spring-context`还支持AOP(面向切面编程)、事件传播、国际化以及资源加载等功能。 `spring-webmvc`模块则是Spring MVC(Model-View-Controller)的实现,是Web应用的核心组件。它处理HTTP请求,通过...