本文主要是介绍使用反射和注解简单模拟服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 通过使用注解和反射可以动态的实现类的加载和使用,方便程序的扩充和维护
通过使用注解和反射的方式实现一个简单的模拟服务器的功能,从控制台获取URL后进行跳转操作
- 注解文件
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)public @interface WebServlet{String url();
}
- Servlet文件
public class UpdateServlet{public void doPost(){System.out.println("UpdateServlet");}
}
- 服务器文件
public Class TomcatServer{private static Map<String,Class> config;public static void main(String[] args) throws Exception{startup();String url = null;System.out.println("请输入URL");Scanner sc = new Scanner(System.in);url = sc.nextLine();if(!config.containsKey(url)){System.out.println("404");return;}Class cz = config.get(url);Object obj = cz.newInstance();Method method = cz.getDeclaredMethod("doPost");method.invoke(obj);}public static void startup(){try{config = new HashMap<String,Class>();findAndLoadClass()}catch(Exception e){e.printStackTrace();}}public static void findAndLoadClass() throws Excetption{String packg = "annotation.tomcat";String dir = "src/"+packg.replace(".","/");File file = null;file = new File(dir);Strin[] names = file.list();for(String name:names){String className = pack+"."+name.substring(0,name.indexOf('.'));Class cz = Class.forName(className);if(cz.isAnnotationPresent(WebServlert.class)){String url = ((WebServlert) cz.getAnnotation(WebServlert.class)).url();config.put(url,cz);}}}
}
这篇关于使用反射和注解简单模拟服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!