PathMatchingResourcePatternResolver 获取资源(XML 文件)

解决在spring整合mybatis注释方式的xml文件无法被加载的问题

在很多朋友进行mybatis整合的时候都是很蒙圈的,尤其是自己进行注释的写法的时候

配置sqlSessionFactroyBean 的时候配置mapperLocation的时候,spring提供了一个参数为resource[] 的setmapperLocation()方法,节省了处理mapper.xml的时间,同时也为我们的使用带来一个疑惑,怎么获得这个resource[] 呢?总不能手动建立,那这样框架的优势就被磨灭了。
PathMatchingResourcePatternResolver
这是spring 框架为我们提供的进行资源获取的函数
两种形式:

  • 参数为“classpath:XXX”
  • 参数Wie“classpath*:XXX”
    这两种形式的参数分别表示获取指定位置的资源(一个仅仅一个)和获取符合XXX表达式的所有资源(XXX中含有通配符)
    当然至于通配符我这里就不多论述了,就是利用*代替通配部分,另一个点是利用 \**\进行忽略中间路径

重点

对于xml文件和class文件的路径的不同
我在使用pathMathingResourcePatternReslover 的过程中发现class 文件的使用和xml 文件的使用有些不同
问题是这样的xml 和class在同一个包下
一个url是com/XM/BAO/.class;
另一个是com.XM/Bao/
.xml
暂时没有解决,我去搜@@@@大佬

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package cn.javass.spring.chapter4; import java.io.File; import java.io.IOException; import junit.framework.Assert; import org.jboss.vfs.VFS; import org.jboss.vfs.VirtualFile; import org.jboss.vfs.spi.RealFileSystem; import org.junit.Test; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; @SuppressWarnings("all") public class ResourcePatternTest { @Test public void testClasspathPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //只加载一个绝对匹配Resource,且通过ResourceLoader.getResource进行加载 Resource[] resources = resolver.getResources("classpath:META-INF/INDEX.LIST"); Assert.assertEquals(1, resources.length); //只加载一个匹配的Resource,且通过ResourceLoader.getResource进行加载 resources = resolver.getResources("classpath:META-INF/*.LIST"); Assert.assertTrue(resources.length == 1); //只加载一个绝对匹配Resource,且通过ResourceLoader.getResource进行加载 resources = resolver.getResources("classpath:META-INF/MANIFEST.MF"); Assert.assertEquals(1, resources.length); } @Test public void testClasspathAsteriskPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //将加载多个绝对匹配的所有Resource //将首先通过ClassLoader.getResources("META-INF")加载非模式路径部分 //然后进行遍历模式匹配 Resource[] resources = resolver.getResources("classpath*:META-INF/INDEX.LIST"); Assert.assertTrue(resources.length > 1); //将加载多个模式匹配的Resource resources = resolver.getResources("classpath*:META-INF/*.LIST"); Assert.assertTrue(resources.length > 1); } @Test public void testClasspathAsteriskPrefixLimit() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //将首先通过ClassLoader.getResources("")加载目录, //将只返回文件系统的类路径不返回jar的跟路径 //然后进行遍历模式匹配 Resource[] resources = resolver.getResources("classpath*:asm-*.txt"); Assert.assertTrue(resources.length == 0); //将通过ClassLoader.getResources("asm-license.txt")加载 //asm-license.txt存在于com.springsource.net.sf.cglib-2.2.0.jar resources = resolver.getResources("classpath*:asm-license.txt"); Assert.assertTrue(resources.length > 0); //将只加载文件系统类路径匹配的Resource resources = resolver.getResources("classpath*:LICENS*"); Assert.assertTrue(resources.length == 1); } @Test public void testFilekPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("file:D:/*.txt"); Assert.assertTrue(resources.length > 0); } @Test public void testVfsPrefix() throws IOException { //1.创建一个虚拟的文件目录 VirtualFile home = VFS.getChild("/home"); //2.将虚拟目录映射到物理的目录 VFS.mount(home, new RealFileSystem(new File("d:"))); //3.通过虚拟目录获取文件资源 VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("/home/test.txt"); Assert.assertTrue(resources.length > 0); System.out.println(resources[0].getClass()); } }
要使用 SAX 解析器获取 XML 文件节点,可以按照以下步骤: 1. 创建一个 SAXParserFactory 对象,并调用它的 newSAXParser() 方法创建一个 SAXParser 对象。 2. 实现一个 DefaultHandler 类的子类,重写它的 startElement() 方法和 endElement() 方法,用来处理 XML 文件中的开始标签和结束标签。 3. 调用 SAXParser 对象的 parse() 方法,将 XML 文件路径和 DefaultHandler 对象作为参数传入。 下面是一个示例代码,演示如何使用 SAX 解析器获取 XML 文件节点: ```java import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class SAXParserExample extends DefaultHandler { public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SAXParserExample handler = new SAXParserExample(); parser.parse("example.xml", handler); } public void startElement(String uri, String localName, String qName, Attributes attributes) { System.out.println("Start Element: " + qName); } public void endElement(String uri, String localName, String qName) { System.out.println("End Element: " + qName); } } ``` 在上面的代码中,我们创建了一个 SAXParserExample 类,它继承了 DefaultHandler 类,并重写了 startElement() 和 endElement() 方法。在 startElement() 方法中,我们打印出了 XML 文件中的开始标签的名称;在 endElement() 方法中,我们打印出了 XML 文件中的结束标签的名称。在 main() 方法中,我们创建了一个 SAXParser 对象,并调用它的 parse() 方法来解析 XML 文件。最后,我们将 SAXParserExample 对象作为处理器传入 parse() 方法中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值