Java反射机制使用场景
- import java.io.*;
- import java.util.Properties;
- /*问题描述:存在一个主板--已经定义好,不想修改其代码,还想在主板上面增加一些其他功能?
- *问题解决方法:主板在定义的时候对外提供一个接口,让其他设备实现该接口,并把这些设备的
- *信息写在配置文件里面。主板定义的时候读配置文件的信息,动态的获取其他设备的信息,并使用
- *其他的功能。这样就完全不用修改主板的代码。极大的提高了程序的扩展性。
- *所以通过反射就可以动态获取扩展类的对象,只需要修改具体配置文件的内容即可。
- *
- *反射:动态的获取类的信息。其实是通过类名,加载类,获取类的Class对象,进而做其他的操作。
- * 使用反射的最大的好处是程序的扩展性大大的提高。
- *反射涉及的类:Class,java.lang.reflect包里面的Method,Field,Constructor支持
- * */
- public class UseReflection {
- public static void main(String[] args) throws IOException, ClassNotFoundException, Exception {
- MainBoard mb = new MainBoard();
- mb.run();
- //把添加的设备写在配置文件中,并将该文件封装为对象
- File f = new File("pci.properties");
- //将配置文件关联到流
- FileInputStream fis = new FileInputStream(f);
- //创建Properties对象
- Properties prop = new Properties();
- //将流中的信息加载到prop里面
- prop.load(fis);
- //遍历从流中得到的信息
- for(int i = 0; i < prop.size();i++){
- String name = prop.getProperty("pci"+(i+1));
- Class clazz = Class.forName(name);
- PCI p = (PCI)clazz.newInstance();
- mb.usePCI(p);
- }
- }
- }
- class MainBoard{
- public void run(){
- System.out.println("mainboard run-------");
- }
- public void usePCI(PCI p){
- if(p != null){
- p.open();
- p.close();
- }
- }
- }
- public interface PCI {
- public void open();
- public void close();
- }
- class SoundBoard implements PCI{
- public SoundBoard() {
- }
- @Override
- public void open() {
- System.out.println("open sound");
- }
- @Override
- public void close() {
- System.out.println("close sound");
- }
- }
- class WifiBoard implements PCI{
- public WifiBoard() {
- }
- @Override
- public void open() {
- System.out.println("open wifi");
- }
- @Override
- public void close() {
- System.out.println("close wifi");
- }
- }
上面是一种模拟的反射机制的使用,真实使用反射机制的一个比较常见的例子是Tomcat--web服务器,Tomcat服务器的作用:就是处理浏览器的请求
和给予合适的应答,但是浏览器的请求类型通常不一样,为了提高服务器的扩展性,通常在Tomcat编写时就对外提供一个公共的接口--Servlet,要进行怎样
的响应和处理请求,需要开发人员需要做的就是直接实现该接口,定义合适的处理方式,并将具体实现类信息写在配置文件中,Tomcat在操作的时候根据读取
配置文件的内容,动态的获得合适的处理方式,处理浏览器的请求,开发者的编程难度也下降,直接面对的是接口和配置文件。想要修改具体的处理方式,直接
修改配置文件的内容即可。
Java反射机制使用场景的更多相关文章
- Java反射机制概念及应用场景
Java的反射机制相信大家在平时的业务开发过程中应该很少使用到,但是在一些基础框架的搭建上应用非常广泛,今天简单的总结学习一下. 1. 什么是反射机制? Java反射机制是在运行状态中,对于任意一个类 ...
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- 长篇图解java反射机制及其应用场景
一.什么是java反射? 在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new 类名()方式来获取该类的对象.也就是说我们需要在写代码的时候(编译期或者编译期之前)就知道我们 ...
- 11 java 反射机制
Java反射机制的适用场景及其利与弊: http://blog.csdn.net/zolalad/article/details/29370565 http://my.oschina.net/u/10 ...
- Java反射机制浅析
概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- Java反射机制深度剖析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...
- 【java提高】---java反射机制
java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...
- Java反射机制与工厂模式
工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...
- Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性
模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...
随机推荐
- poj3264 最大值与最小值的差
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...
- [js高手之路]html5 canvas动画教程 - 边界判断与小球粒子模拟喷泉,散弹效果
备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 本文,我们要做点有意思的效果,首先,来一个简单 ...
- Python实战之Selenium自动化测试web登录(2)
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver ...
- WebApi实现验证授权Token,WebApi生成文档等
using System; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Security; ...
- CSS3实现3D旋转相册
静态效果图: 代码如下: <!doctype html><html lang="en"><head> <meta charset=&quo ...
- Github Page--CSDN新人的第二选择
我也是个CSDN新人,使用的CSDN的初衷应该和众人类似,就是想总结下平时的学习成果,或者一些想法. CSDN好的地方: 书写界面简洁,支持markdown语法 人还算多,也比较年轻 相对较活跃 内容 ...
- 2017值得一瞥的JavaScript相关技术趋势
2017值得一瞥的JavaScript相关技术趋势从属于笔者的Web 前端入门与工程实践,推荐阅读2016-我的前端之路:工具化与工程化获得更多关于2016年前端总结.本文主要内容翻译自,笔者对于每个 ...
- 如何使用 C# 爬虫获得专栏博客更新排行
昨天,梦姐问我们,她存在一个任务,找到 关注数排行100 和 浏览量排行100 的专栏博客,在2017年还有更新的专栏. 梦姐说他要出去一趟,M大神在吃饭,于是我估算时间,只有半个钟. 整理一下:半个 ...
- C#命令行解析工具
我将告诉大家两个方法去获取C#输入的命令行参数. 第一个方法: 林选臣大神写的,他的方法很简单. 首先复制两个类到项目 public class CommandLineArgumentParser { ...
- web前端开发初学者必看的学习路线(附思维导图)
很多同学想学习WEB前端开发,虽然互联网有很多的教程.网站.书籍,可是却又不知从何开始如何选取.看完网友高等游民白乌鸦无私分享的原标题为<写给同事的前端学习路线>这篇文章,相信你会有所收获 ...