java什么时候用反射_Java反射机制使用场景

1 import java.io.*;2 importjava.util.Properties;3

4 /*问题描述:存在一个主板--已经定义好,不想修改其代码,还想在主板上面增加一些其他功能?5 *问题解决方法:主板在定义的时候对外提供一个接口,让其他设备实现该接口,并把这些设备的6 *信息写在配置文件里面。主板定义的时候读配置文件的信息,动态的获取其他设备的信息,并使用7 *其他的功能。这样就完全不用修改主板的代码。极大的提高了程序的扩展性。8 *所以通过反射就可以动态获取扩展类的对象,只需要修改具体配置文件的内容即可。9 *10 *反射:动态的获取类的信息。其实是通过类名,加载类,获取类的Class对象,进而做其他的操作。11 * 使用反射的最大的好处是程序的扩展性大大的提高。12 *反射涉及的类:Class,java.lang.reflect包里面的Method,Field,Constructor支持13 **/

14 public classUseReflection {15

16 public static void main(String[] args) throwsIOException, ClassNotFoundException, Exception {17 MainBoard mb = newMainBoard();18 mb.run();19

20 //把添加的设备写在配置文件中,并将该文件封装为对象

21 File f = new File("pci.properties");22 //将配置文件关联到流

23 FileInputStream fis = newFileInputStream(f);24 //创建Properties对象

25 Properties prop = newProperties();26 //将流中的信息加载到prop里面

27 prop.load(fis);28 //遍历从流中得到的信息

29 for(int i = 0; i < prop.size();i++){30 String name = prop.getProperty("pci"+(i+1));31 Class clazz =Class.forName(name);32 PCI p =(PCI)clazz.newInstance();33 mb.usePCI(p);34 }35

36

37 }38

39 }40

41 classMainBoard{42 public voidrun(){43 System.out.println("mainboard run-------");44 }45

46 public voidusePCI(PCI p){47 if(p != null){48 p.open();49 p.close();50 }51 }52 }

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在操作的时候根据读取

配置文件的内容,动态的获得合适的处理方式,处理浏览器的请求,开发者的编程难度也下降,直接面对的是接口和配置文件。想要修改具体的处理方式,直接

修改配置文件的内容即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值