zoukankan      html  css  js  c++  java
  • 反射的应用

    源代码封装完成后,通过配置文件对源程序进行扩展

    需求:源代码是主板,提供PCI接口进行使用,现在对源代码进行扩充声卡的功能。

    接口:PCI

    package reflect.test;
    
    public interface PCI {
    	void open();
    	void close();
    }
    

     主板运行类:(方法:usePCI进行接收PCI的子类,也就是传入扩展的类。)

    package reflect.test;
    
    
    public class MainBoard {
    	public void run(){
    		System.out.println("main board run...");
    	}
    	public void usePCI(PCI p){
    		if(p!=null){
    		p.open();
    		p.close();
    		}
    	}
    }
    

     主方法:(存在反射的使用,存在方法的调用,存在配置文件的读取等)

    package reflect.test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class ReflectTest {
    	public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
    		MainBoard mb=new MainBoard();//实例化主板对象
    		mb.run();//进行调用运行方法
    		File f=new File("pci.properties");//创建配置文件
    		
    		Properties prop=new Properties();//实例化配置对象
    		FileInputStream fis=new FileInputStream(f);//字节输入流,进行读取配置文件中的内容
    		prop.load(fis);//配置对象与输入流进行连接
    		for(int i=0;i<prop.size();i++){
    			String pciName=prop.getProperty("pci"+(i+1));//依次得到pci1,pci2...获得内容是的是扩展类的类名
    			Class cla=Class.forName(pciName);//利用反射获得字节码文件
    			PCI p=(PCI)cla.newInstance();//利用反射进行实例化
    			mb.usePCI(p);//调用主板方法中的方法
    		}
    		fis.close();//关闭输入流。
    	}
    
    }
    

     配置文件(在java项目录中创建 pci.properties ,名称必须与主方法中连接的配置文件名一致)

    pci1=reflect.test.SoundCard
    

     自己定义的类(名称必须与配置文件中连接的类名一致,先创建类,在再配置文件中配置,必须实现源代码提供的某个类,本程序中只有PCI一个接口,实现这个接口)

    package reflect.test;
    
    
    public class SoundCard implements PCI{
    
    	@Override
    	public void open() {
    		System.out.println("sound card open");
    	}
    
    	@Override
    	public void close() {
    		System.out.println("sound card close");
    	}
    	
    }
    

     配置好后,不用修改主方法,直接运行自己定义的类。

  • 相关阅读:
    使用 Spring + CXF 发布 REST 服务
    在web项目中使用CXF暴露REST服务
    学习SpringMVC——从HelloWorld开始
    java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    安装maven时JAVA_HOME的配置小问题
    java 接口的实现和继承关系
    servlet的两种配置方式
    C# MainWindowHandle为0的解决方法
    C# WindowsMediaPlayer 的一些用法
    C# 获取MP3信息
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4522702.html
Copyright © 2011-2022 走看看