基础加强____【反射的作用__实现框架功能】

来源:互联网 发布:中级会计合并报表知乎 编辑:程序博客网 时间:2024/05/16 11:56



在java主流的开源框架中都应用了反射技术,学习反射能让我们加深对这些框架的理解,如果有能力也可以做出自己的功能框架

反射的作用: "实现框架功能"框架与工具类的区别:工具类被用户提供的类调用,框架是调用用户提供的类如果用户的类相当于一扇门,框架相当于房子,工具类相当于门上的锁。框架要解决的问题:不知道用户提供的类名,所以在程序中无法直接new出某个类的实例对象,而要通过反射来做案例:ReflectTest2创建ArrayList 与HashSet的实例,比较差异然后改为配置文件加反射的方式创建对象,比较差异反射的好处:可以不修改源码,而是通过修改配置文件来修改程序,这也是框架功能的体现了解eclipse对资源文件的管理方式,分清"相对路径"和"绝对路径"eclipse会将工程中src目录下.java文件编译成.class文件生成到classPath(bin)目录下,将其他文件直接copy到bin目录而系统在运行时调用的配置文件是在classPath目录下查找配置文件//路径:getRealPath(); 获取完整(相对)路径要使用完整的路径,但完整的路径不是硬编码,而是运算出来的加载配置文件(config.properties)的方式:1)用IO流加载 InputStream2)用"类加载器"加载文件InputStream fis = .class.getClassLoader().getResourceAsStream("classPath")//绝对路径java中的类是通过类加载器加载class字节码进内存来运行的;类加载器既然可以加载class文件,加载普通文件当然也是可以的,该方式以只读的方式来加载配置文件,因为没有对应的OutputStream方法在框架中都是以类加载器的方式来加载配置文件,所以配置文件必须放在classPath目录下类加载器方式在框架中是一种比较通用的方式,3)/使用class的简便方法(在底层调用了类加载器),即可使用相对路径,又可使用绝对路径  InputStream fis = .class.getResourceAsStream("classPath");//相对路径配置文件加载进内存后使用properties类进行操作new Properties().load(fis);

创建配置文件,通过eclipse在工程中new一个 properties后缀的File即可

在配置文件中把想要操作的类以 name = value的形式存入;如className=java.util.HashSet

加载配置文件的代码实现


/*从配置文件加载类名路径:可以通过getRealPath(); 获取完整(相对)路径要使用完整的路径,但完整的路径不是硬编码,而是运算出来的一、使用普通IO方法的好处是能够有对应的OutputStream, 可以保存配置文件InputStream fis = new FileInputStream("config.properties");*//*二、使用类加载器加载配置文件,加载的数据类型为InputStream,只读,没有对应的OutputStreamInputStream fis = ReflectTest2.class.getClassLoader() .getResourceAsStream("itheima/enhance/config.properties");//绝对路径*///三、使用class的简便方法(在底层调用了类加载器),即可使用相对路径,又可使用绝对路径  InputStream fis = ReflectTest2.class.getResourceAsStream("resource/config.properties");//相对路径Properties prop = new Properties();prop.load(fis);//将prop与输入流关联fis.close();//关闭资源String className = prop.getProperty("className");//获取类名//反射方式创建对象,要转型Collection collections = (Collection)Class.forName(className).newInstance();//反射方式体现的好处:可以不修改源码,而是通过修改配置文件来修改程序


3 0
原创粉丝点击