博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
框架的概念及用反射技术开发框架的原理--getResourceAsStream用法详解
阅读量:5960 次
发布时间:2019-06-19

本文共 2745 字,大约阅读时间需要 9 分钟。

hot3.png

反射的作用—>实现框架的功能

框架-用户类-工具类:框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。

框架要解决的核心问题:框架如何调用未知的类:通过反射来实现

综合案例: 使用配置文件读取调用类的名字

ReflectTest测试类

复制代码

 

1 package com.ljq.test;

2
3 import java.io.FileInputStream;
4 import java.io.InputStream;
5 import java.util.Collection;
6 import java.util.Properties;
7
8  /**
9 * 使用配置文件读取调用者的类
10 *
11 * @author jiqinlin
12 *
13 */
14  public class ReflectTest {
15    public static void main(String[] args) throws Exception{
16        //使用绝对路径,否则无法读取config.properties
17        //InputStream inStream=new FileInputStream("F:\\android\\test\\src\\com\\ljq\\test\\resource\\config.properties");
18        
19        //ReflectTest.class.getClassLoader().getResourceAsStream(String path): 默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
20        //InputStream inStream = ReflectTest.class.getClassLoader().getResourceAsStream("com/ljq/test/resource/config.properties");
21        
22        // ReflectTest.class.getResourceAsStream(String path): path不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。
23        //其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
24        //InputStream inStream = ReflectTest.class.getResourceAsStream("/com/ljq/test/resource/config.properties");
25        
26        //config.properties配置文件所在目录是ReflectTest类所在子目录,才可以;否则报空指针异常
27          InputStream inStream = ReflectTest.class.getResourceAsStream("resource/config.properties");
28        
29        Properties props=new Properties();
30        props.load(inStream);
31        inStream.close();
32        
33        String className=props.getProperty("className");
34        Collection collection=(Collection)Class.forName(className).newInstance();
35        collection.add("123");
36        System.out.println("size="+collection.size()); //size=1
37      }
38 }

复制代码

config.properties配置文件

className=java.util.HashSet

getResourceAsStream用法大致有以下几种:

复制代码

 

1 第一:要加载的文件和.class文件在同一目录下,例如:com.ljq.test目录下有类ReflectTest.class,同时有资源文件config.properties

2
3 那么,应该有如下代码:
4 ReflectTest.class.getResourceAsStream("config.properties");
5
6 第二:在ReflectTest.class目录的子目录下,例如:com.ljq.test下有类ReflectTest.class,同时在com.ljq.test.resource目录下有资源文件config.properties
7
8 那么,应该有如下代码:
9 ReflectTest.class.getResourceAsStream("resource/config.properties");
10
11 第三:不在ReflectTest.class目录下,也不在子目录下,例如:com.ljq.test下有类ReflectTest.class ,同时在com.ljq.resource目录下有资源文件config.properties
12
13 那么,应该有如下代码:
14 ReflectTest.class.getResourceAsStream("/com/ljq/resource/config.properties");
15
16 总结一下,可能只是两种写法
17
18 第一:前面有 “/” ,“/”代表了工程的根目录,例如工程名叫做test,“/”代表了test
19 ReflectTest.class.getResourceAsStream("/com/ljq/resource/config.properties");
20
21 第二:前面没有 “/” ,代表当前类的目录
22 ReflectTest.class.getResourceAsStream("config.properties");
23 ReflectTest.class.getResourceAsStream("resource/config.properties");
24
25 最后,总结
26 getResourceAsStream读取的文件路径只局限在工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。

转载于:https://my.oschina.net/bigdataer/blog/373737

你可能感兴趣的文章
Yxcms网站管理系统安装
查看>>
字符串,链表,树
查看>>
Nginx错误日志(error_log)配置及信息详解
查看>>
Highcharts 学习笔记
查看>>
高性能python编程之协程
查看>>
PHP编译过程中常见错误信息的解决方法
查看>>
redis服务端及php客户端安装方法
查看>>
定时删除文件
查看>>
mysql主从同步
查看>>
springmvc 高级3 之 统一异常处理
查看>>
我的友情链接
查看>>
memcache安装
查看>>
(总结)Web性能压力测试工具之ApacheBench(ab)详解
查看>>
我的友情链接
查看>>
AWT查看oracle历史sql语句执行
查看>>
支付宝、微信、QQ红包大战,商家选谁更靠谱?
查看>>
人工智能:智慧型手机的未来
查看>>
为何时尚品牌的“IP+”只能在京东完成?
查看>>
Oracle的AWR报告分析
查看>>
智能DNS服务器配置
查看>>