原创

Spring学习总结(24)——Spring配置文件加载路径总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://zhanghaiyang.blog.csdn.net/article/details/78636952
1. Spring使用ClassPathXmlApplicationContext 从classpath读取
ClassPathXmlApplicationContext 默认会去 classPath 路径下找。classPath 路径指的就是编译后的 classes 目录。
1.1 如果配置文件在classpath目录下:
ClassPathXmlApplicationContext tx = new ClassPathXmlApplicationContext("appContext2.xml");
1.2 如果一个包专门用来存配置文件
ClassPathXmlApplicationContext tx = new ClassPathXmlApplicationContext("//my/config/appContext2.xml");
或者
ClassPathXmlApplicationContext tx = new ClassPathXmlApplicationContext("my/config/appContext2.xml");
其实这两种都是相对于classpath路径的路径
1.3 也可以绝对路径获取,但是路径前要加“file”
BeanFactory beanFactory = new ClassPathXmlApplicationContext("file:E:projectsrcmainesourcesapplicationContext.xml");
2. Spring使用FileSystemXmlApplicationContext加载
FileSystemXmlApplicationContext 默认是去项目的路径下加载,可以是相对路径,也可以是绝对路径,若是绝对路径,“file:” 前缀可以缺省。
2.1 使用FileSystemXmlApplicationContext也可以从classpath加载,要在路径前添加classpath前缀
FileSystemXmlApplicationContext tx = new FileSystemXmlApplicationContext("classpath:my/config/appContext2.xml");
2.2 以绝对路径形式加载
FileSystemXmlApplicationContext tx = new FileSystemXmlApplicationContext("d:/my/config/appContext2.xml");
当然 这里比较好的做法是程序运行期间动态的算出绝对路径,避免直接在代码里写死一个绝对路径。
3. SpringMvc使用WebApplicationContext
在Web项目中,可以使用ContextLoaderListener 自动装配ApplicationContext的信息。
在web.xml文件中创建监听器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
配置配置文件路径
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/appContext.xml</param-value>
</context-param>
ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml, 在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。
如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数: 在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔。
也可以这样applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis-base.xml,
applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入。
4. Java中的路径读取
封装一个方法获取classpath绝对路径:
public static String getRealPath(String file) {
String path = PathUtils.class.getClassLoader().getResource(file).getPath();
return path;
}
class.getResource("")要想获得文件的路径,得从最终生成的.class文件为着手点,再结合相对路径的概念,就可以准确地定位资源文件了。不同的IDEbuild出来是不同的位置下的,不过都是以顶层package作为根目录,比如在Web应用中,有一个WEB-INF的目录,WEB-INF目录里面除了web.xml文件外,还有一个classes目录,它就是这个WEB应用的package的顶层目录,也是所有.class的根目录“/”,假如clasaes目录下面有一个mynewfile.txt文件,它的相对路径就是"/mynewfile.txt",如果相对路径不是以"/"开头,那么它就是相对于.class的路径。
class.getClassLoader().getResource 如果是getClassLoader().getResource,路径前加不加"/"都是可以的,比如Home.class.getClassLoader().getResource("my/config/file1.html")和Home.class.getClassLoader().getResource("/my/config/file1.html")都是可以的。
还有一个getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,再new InputStream(file)一样的结果
文章最后发布于: 2017-11-26 13:32:16
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览