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



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

反射的作用: "实现框架功能"
	框架与工具类的区别:工具类被用户提供的类调用,框架是调用用户提供的类	
		如果用户的类相当于一扇门,框架相当于房子,工具类相当于门上的锁。
	框架要解决的问题:不知道用户提供的类名,所以在程序中无法直接new出某个类的实例对象,而要通过反射来做
案例:ReflectTest2
	创建ArrayList 与HashSet的实例,比较差异
	然后改为配置文件加反射的方式创建对象,比较差异
		反射的好处:可以不修改源码,而是通过修改配置文件来修改程序,这也是框架功能的体现

	了解eclipse对资源文件的管理方式,分清"相对路径"和"绝对路径"
	eclipse会将工程中src目录下.java文件编译成.class文件生成到classPath(bin)目录下,将其他文件直接copy到bin目录
	而系统在运行时调用的配置文件是在classPath目录下查找
配置文件
	//路径:getRealPath(); 获取完整(相对)路径
	要使用完整的路径,但完整的路径不是硬编码,而是运算出来的
加载配置文件(config.properties)的方式:
	1)用IO流加载 InputStream
	2)用"类加载器"加载文件
	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,只读,没有对应的OutputStream
		InputStream 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();
		//反射方式体现的好处:可以不修改源码,而是通过修改配置文件来修改程序


posted on 2014-02-13 14:15  hwren  阅读(209)  评论(0编辑  收藏  举报

导航