现在的位置: 首页 > 综合 > 正文

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

2013年10月20日 ⁄ 综合 ⁄ 共 1609字 ⁄ 字号 评论关闭

        在上一篇文章中说说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框架的使用.

          

抱歉!评论已关闭.