说说java反射(2)反射的价值

来源:互联网 发布:内网管理软件 编辑:程序博客网 时间:2024/06/03 07:45

        在上一篇文章中说说java反射(1)我们已经了解了反射的基本概念以及它的原理,但是我们知道反射只能能用它来做些什么呢?

        其实在我们很多已经很熟的框架中都有它的身影,例如Hibernate框架中的关联映射,Spring框架:IOC(控制反转).反射可以实现各种框架功能,接下来我们通过一个实例来写一个很小很小的框架,通过此例子来理解反射真正的价值所在.


       接下来的例子主要功能是通过java反射来获取配置文件中的信息.通过配置文件,在程序运行的时候实例化所需要的类型的实例.


        首先先建立一个资源文件,这里我们用config.properties来进行配置相关信息.

         config.properties文件内容如下:指定类型为ArrayList类型.

ClassName=java.util.ArrayList


         接下来建立一个反射测试类:


package com.tgb.java;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Collection;import java.util.Properties;/** * 通过一个小例子来演示通过反射技术实现一个简单的框架. *  * @author jnqqls * @group TGB * @version 1.0 *  * @comments */public class ReflectTest {/** * @param args * @throws IOException * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException */public static void main(String[] args) throws IOException,InstantiationException, IllegalAccessException,ClassNotFoundException {// 将文件读入数据流InputStream ipt = new FileInputStream("config.properties");// 创建Properties对象Properties ppt = new Properties();// 将数据流载入到ppt对象中.ppt.load(ipt);// 关闭占用资源.ipt.close();// 获取配置文件中的名字.String className = ppt.getProperty("ClassName");// 通过反射创建className所对应的类的一个实例.@SuppressWarnings("unchecked")Collection<String> collections = (Collection<String>) Class.forName(className).newInstance();collections.add(new String("a"));collections.add(new String("b"));System.out.println(collections.size());}}

 

         通过测试,输出的数字为2.也就是集合中有两个对象.这里和我们通常的new是不一样的概念,我们的例子是在运行时所创建的对象,而我们常用的new是在编译的时候所生成的对象,因为可以配置我们想要的类型和生成的对象,这便为各种框架提高了支撑.

         现在对框架有了一个最简单的例子,通过对反射有了一定的了解便会更进一步的了解Spring框架,对于Spring框架的铺垫就是这些.接下来会继续介绍Spring框架的使用.

          


原创粉丝点击