反射的作用——>实现框架功能
1、框架与框架要解决的核心问题
我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入到我的框架中。框架与工具类有区别,工具类是被用户调用,而框架是调用用户的类。
2、框架要解决的核心问题
我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎么才能调用到你以后写的类呢?因为在写框架程序时无法知道要被调用的类名,所以在程序中无法直接New某个类的实例对象,而要用反射方式来做。
例子,比如在配制文件config.properties中,定义className = java.util.ArrayList ,下面先说加载资源文件的两种方式。
方式一:InputStream ips = new InputStream("config.properties") ;//放在工程目录下
Properties props = new Properties() ;
props.load(ips) ;
props.close() ;
方式二:采用类加载器
当前类名.class.getClassLoader().getResourAsStream("config.properties") ;
也可以直接用 当前类名.class.getResourAsStream("config.properties") ;
//此时资源文件放在当前类文件的同级目录下,很多框架都采用这种方式。
下面通过反射来得到实例
String className= props.getProperty("className") ;
Collection collections = (Collection)Class.forName(className).newInstance() ;