JavaWeb开发中,Class.getResource()和ClassLoader.getResource()区别

JavaWeb开发中,Class.getResource()和ClassLoader.getResource()区别

问题

手写一个简易的springMVC,其中一个功能是扫描指定包路径下的所有类,并将其加入到集合中去,被折磨了好久
在这里插入图片描述

正确写法1

    public void doScanner(String scanPackage) {
    	// 将.的形式改为/ 比如com.fanyinhang ->> com/fanyinhang
        URL url=this.getClass().getClassLoader().getResource(scanPackage.replaceAll("\\.", "/"));
        File classDir=new File(url.getFile());
        for(File file:classDir.listFiles()){
            if(file.isDirectory()){
                doScanner(scanPackage+"."+file.getName());
            }else{
                String className=scanPackage+"."+file.getName().replace(".class","");
                classNames.add(className);
            }
        }
    }

正确写法2

    public void doScanner(String scanPackage) {
    	// 将.的形式改为/ 比如com.fanyinhang ->> com/fanyinhang
        URL url=this.getClass().getResource("/"+scanPackage.replaceAll("\\.", "/"));
        File classDir=new File(url.getFile());
        for(File file:classDir.listFiles()){
            if(file.isDirectory()){
                doScanner(scanPackage+"."+file.getName());
            }else{
                String className=scanPackage+"."+file.getName().replace(".class","");
                classNames.add(className);
            }
        }
    }

这两种写法的区别仅仅在于Class.getResource()和ClassLoader.getResource()

总结

Class.Resource(String name) 可以是相对本文件的路径;也可以是绝对路径,也就是项目的根路径(如 /com/fanyinhang)
ClassLoader.getResource(String name)可以是相对于项目根路径(如 com/fanyinhang),但是无法接收绝对路径

希望能够帮助各位小伙伴们!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值