日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring容器初始化实现V1 版本

發(fā)布時間:2024/4/13 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring容器初始化实现V1 版本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所有的核心邏輯全部寫在一個init()方法中。

public class V1DispatcherServlet extends HttpServlet {private Map<String,Object> mapping = new HashMap<String, Object>();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {doDispatch(req,resp);} catch (Exception e) {resp.getWriter().write("500 Exception " + Arrays.toString(e.getStackTrace()));}}private void doDispatch(HttpServletRequest req, HttpServletResponse resp) throws Exception {String url = req.getRequestURI();String contextPath = req.getContextPath();url = url.replace(contextPath, "").replaceAll("/+", "/");if(!this.mapping.containsKey(url)){resp.getWriter().write("404 Not Found!!");return;}Method method = (Method) this.mapping.get(url);Map<String,String[]> params = req.getParameterMap();method.invoke(this.mapping.get(method.getDeclaringClass().getName()),new Object[]{req,resp,params.get("name")[0]});}//當我暈車的時候,我就不去看源碼了//init方法肯定干得的初始化的工作//inti首先我得初始化所有的相關的類,IOC容器、servletBean@Overridepublic void init(ServletConfig config) throws ServletException {InputStream is = null;try{Properties configContext = new Properties();is = this.getClass().getClassLoader().getResourceAsStream(config.getInitParameter("contextConfigLocation"));configContext.load(is);String scanPackage = configContext.getProperty("scanPackage");doScanner(scanPackage);for (String className : mapping.keySet()) {if(!className.contains(".")){continue;}Class<?> clazz = Class.forName(className);if(clazz.isAnnotationPresent(V1Controller.class)){mapping.put(className,clazz.newInstance());String baseUrl = "";if (clazz.isAnnotationPresent(V1RequestMapping.class)) {V1RequestMapping requestMapping = clazz.getAnnotation(V1RequestMapping.class);baseUrl = requestMapping.value();}Method[] methods = clazz.getMethods();for (Method method : methods) {if (!method.isAnnotationPresent(V1RequestMapping.class)) { continue; }V1RequestMapping requestMapping = method.getAnnotation(V1RequestMapping.class);String url = (baseUrl + "/" + requestMapping.value()).replaceAll("/+", "/");mapping.put(url, method);System.out.println("Mapped " + url + "," + method);}}else if(clazz.isAnnotationPresent(V1Service.class)){V1Service service = clazz.getAnnotation(V1Service.class);String beanName = service.value();if("".equals(beanName)){beanName = clazz.getName();}Object instance = clazz.newInstance();mapping.put(beanName,instance);for (Class<?> i : clazz.getInterfaces()) {mapping.put(i.getName(),instance);}}else {continue;}}for (Object object : mapping.values()) {if(object == null){continue;}Class clazz = object.getClass();if(clazz.isAnnotationPresent(V1Controller.class)){Field [] fields = clazz.getDeclaredFields();for (Field field : fields) {if(!field.isAnnotationPresent(V1Autowired.class)){continue; }V1Autowired autowired = field.getAnnotation(V1Autowired.class);String beanName = autowired.value();if("".equals(beanName)){beanName = field.getType().getName();}field.setAccessible(true);try {field.set(mapping.get(clazz.getName()),mapping.get(beanName));} catch (IllegalAccessException e) {e.printStackTrace();}}}}} catch (Exception e) {}finally {if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}}System.out.print("V1 MVC Framework is init");}private void doScanner(String scanPackage) {URL url = this.getClass().getClassLoader().getResource("/" + scanPackage.replaceAll("\\.","/"));File classDir = new File(url.getFile());for (File file : classDir.listFiles()) {if(file.isDirectory()){ doScanner(scanPackage + "." + file.getName());}else {if(!file.getName().endsWith(".class")){continue;}String clazzName = (scanPackage + "." + file.getName().replace(".class",""));mapping.put(clazzName,null);}}} }

?

總結

以上是生活随笔為你收集整理的Spring容器初始化实现V1 版本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久mm| 国产精品久久久久久久久久久久 | 成人深夜视频 | 波多野结衣办公室33分钟 | 成人免费视频观看视频 | 亚洲v欧美| 最新av网站在线观看 | 美女写真福利视频 | 成人漫画网站 | 日韩在线观看视频一区二区 | 成人天堂av| 99视频在线免费观看 | 国产一区二区视频免费观看 | 欧美一区二区三区黄片 | 日韩久久中文字幕 | 欧美做爰猛烈床戏大尺度 | 最近2019中文字幕大全第二页 | 亚洲色妞| 精品国产毛片 | 日本呦呦| 99久久久国产精品免费蜜臀 | 爱露出| 一本到在线视频 | 福利视频免费观看 | 伊人青青操 | 日韩毛片免费观看 | 看全色黄大色黄大片女一次牛 | 夜夜爱爱 | 国产成人自拍一区 | 免费观看久久 | 日本一区二区三区在线观看 | 伦理黄色片 | 夜夜躁狠狠躁日日躁 | 操操插插| 四色成人 | 很黄的网站在线观看 | 狠狠噜噜 | 四虎伊人 | 二区在线播放 | 午夜精品一区二区在线观看 | 丰满人妻中伦妇伦精品app | 最近中文字幕在线中文视频 | 影音先锋在线视频观看 | 国产精品亚洲二区在线观看 | 中文字幕在线观看的网站 | 蜜桃一区二区三区 | 欧美性猛交xxx乱大交3蜜桃 | 日本在线视频一区二区三区 | 未满十八18禁止免费无码网站 | 久久欧美视频 | 韩国伦理中文字幕 | 粉嫩av网址 | 十八禁视频网站在线观看 | 日本xxxxxⅹxxxx69 | 国产成人一区二区三区别 | 女人囗交吞精囗述 | 做爰视频毛片视频 | 伊人婷婷色 | h片大全 | 日本www色 | 999精品免费视频 | jizzjizz黄大片| 国产精品一二三四区 | 欧美日韩h| 久久久久久少妇 | 野花社区视频在线观看 | 视色网 | 美女扒开尿口让男人爽 | 国产字幕在线观看 | 一级性生活毛片 | 午夜影院免费版 | 国产自偷自拍 | 国产青草视频在线观看 | 黄瓜视频在线观看污 | 久久噜噜噜精品国产亚洲综合 | 人乳videos巨大吃奶 | 国产理论在线观看 | 无套内谢的新婚少妇国语播放 | 成人av在线网站 | 91激情网| 国产欧美日韩在线观看 | 性欧美ⅴideo另类hd | 丁香九月激情 | 涩涩视频免费 | 爱爱色图| 成年人午夜网站 | 美国av片 | 日本夜夜操 | 久久国产免费看 | 欧美怡红院 | 99热这里有 | 我爱av好色 | 成人依依 | 免费播放黄色片 | 国产在线一区二区视频 | 涩涩屋视频在线观看 | 日韩精品国产一区二区 | 日韩不卡中文字幕 | 伊人色区|