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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

浅说动态生成Class实现MVC

發布時間:2024/4/13 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅说动态生成Class实现MVC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

<h1>前言</h1> <p>java web的MVC,一個爛的不能再爛的一個話題了,可以說,現在市面上或者網上一搜,都有很多很優秀的MVC框架。那么這里為什么還要寫一篇著相關的文章呢,在這介紹下本文的背景,之前幫一個朋友做個網站,由于本人只會java,所以就用java寫了一個,但是由于資金有限,只能找一些便宜的jsp空間,那么這樣隨之而來的問題就是,這樣的空間實在是給的東西有限,最主要的問題就是內存不夠。所以就想,如果我不用任何框架,純servlet編寫,是否就能節約內存和提高執行效率,于是選擇了直接采用servlet編寫,但是這樣確實帶來很多維護和編程上的不便。于是就想能否寫一個MVC框架,在程序執行之前按照規則自動生成各種代理類,那么在程序運行的時候就不需要什么反射,注入等等。既然目標已經確定,那么就按照這個思路繼續往下走吧,就是如何按照規則自動生成我們想要的class。</p> <h1>Action規則制定</h1> <p>首先我們希望定義Action的規則,他的主要作用就是告訴程序,不同的請求是由哪些類和方法處理的。看看下面的代碼: </p> <pre style="overflow: auto" class="brush:java;gutter:true;first-line:1;tab-size:4;toolbar:true;">代碼1: @Action(&quot;/MockServlet&quot;) public class MockServletAction {

@UrlMapping(value=&quot;/execute.action&quot;,method=&quot;GET&quot;,result=&quot;SUCCESS&quot;,path=&quot;/servlet/test.jsp&quot; ) public String execute() throws IOException {return &quot;SUCCESS&quot;; }

}</pre>

<p>這段代碼很容易讀懂,@Action注解告訴程序,所有以/MockServlet開頭的請求由這個類處理,而@UrlMapping中的value告訴程序在/MockServlet之后又是&quot;/execute.action&quot;由execute()這個方法處理,并且必須是GET方式發送過來的請求;到到目前位置,這些注解有點Spring Mvc的味道了,接下來就是@UrlMapping的result和path屬性了,其實他的意思就是當這個方法返回的是SUCCESS的時候采用&quot;/servlet/test.jsp&quot; 這個頁面做圖片的渲染。</p>

<p>接下來就是如何生成我們想要的代碼了,首先讓我們使用最原始的Servlet實現上面的功能,假設我們的Action沒有任何注解,代碼如下: </p>

<pre style="overflow: auto" class="brush:java;gutter:true;first-line:1;tab-size:4;toolbar:true;">代碼2: public class MockServletAction { public String execute() throws IOException { return &quot;SUCCESS&quot;; } }</pre>

<p>我們同樣想讓這個Action去處理/MockServlet/execute.action這個GET請求,那么我們應該按照如下代碼做:</p>

<pre style="overflow: auto" class="brush:java;gutter:true;first-line:1;tab-size:4;toolbar:true;">代碼3: public class ActionServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String servletPath = req.getServletPath(); if(servletPath.equals(&quot;/MockServlet/execute.action&quot;)){ String result = new MockServletAction().execute(); if(result.equals(&quot;SUCCESS&quot;)){ req.getRequestDispatcher(&quot;/servlet/test.jsp&quot;).forward(request, response); } } } }</pre>

<p>通過上面就能夠明白,我們希望有這么一個框架,它能夠通過代碼1中的注解的中所定義的請求轉發規則來自定生成代碼3。這樣就既能夠高效率的運行,減少系統運行時資源的損耗,同時也也能提高開發效率。 </p>

<p>我們也可以為事務做自動修改class,無非就是在方法前后加入事務啟動和事務提交的代碼;依賴注入的話就在構造方法中生成注入的代碼等等. </p>

<h1>Class自動生成的策略</h1>

<p>有人也有疑問,就是我自動生成class,同樣也是消耗資源的。沒錯不僅僅消耗資源,而且還消耗的非常多。但是這種消耗是一次性的,也就是說我程序運行開始就將class生成好,以后就直接使用這個class而無需重復生成。但是有的時候server的配置實在太爛,或者我就是個極端主義者,我就是希望server損耗的越少越好。那么為此這個就有以下兩種策略供選擇: </p>

<h2>1.運行時自動生成Class </h2>

<p>程序運行開始將所有需要的class自動生成或者將修改后的class替換成原有的class。當然這種方式的優點就是開發階段快,但是弊端就是,我們無法在server中替換已經load的class,并且大多數的server提供商也不讓你使用自定義系統級別的classloader,所以我們自動生成的class都將以反射的方式調用。 </p>

<h2>2.在開發階段自動生成Class</h2>

<p>在開發階段就自動生成class,然后打包到war包中,這樣在server上運行的時候使用我們生成的class就和一般的方法調用沒有任何區別,也就是這一點使得我們能夠規避掉策略1中的弊端。原則上講著一種方式在開發和打包這兩個階段中多了一個步驟,就是添加自動生成的class,但是由于項目采用MAVEN開發,我們能夠編寫一個maven插件,自動的執行自動生成類的打包。所以建議使用這種方式。 </p>

<h1>實現</h1>

<p>目前上述構想已經實現,項目名稱為Wheel,而maven插件名稱為wheel-maven-plugin。但是wheel所使用的依賴包asmsupport-0.3-SNAPSHOT,classgrep-1.2-SNAPSHOT都還沒有release,還沒有發布到maven,所以需要手動maven install到本地的maven倉庫。各個包編譯打包順序如下: </p>

<ul> <ol>asmsupport執行maven clean install</ol>

<ol>classgrep執行maven clean install</ol>

<ol>wheel執行maven clean install</ol>

<ol>wheel-maven-plugin執行maven clean install</ol> </ul>

<p>這里也有一個簡單是實例WheelSampleApp, 里面展示了大部分的功能,如AOP,注入等等。</p>

<p>以上涉及到的項目的源碼地址:</p>

<ul> <ol><b>asmsupport:</b>http://code.taobao.org/svn/asmsupport/trunk</ol>

<ol><b>classgrep:</b>http://code.taobao.org/svn/classgrep/trunk</ol>

<ol><b>wheel:</b>http://code.taobao.org/svn/wheel/trunk</ol>

<ol><b>wheel-maven-plugin:</b>http://code.taobao.org/svn/wheel-maven-plugin/trunk</ol>

<ol><b>WheelSampleApp:</b>http://code.taobao.org/svn/WheelSampleApp/trunk</ol> </ul>

<p>Wheel和wheel-maven-plugin正在醞釀發布第一個版本,而calssgrep-1.1和asmsupport-0.2都已經發布,只是wheel所依賴的classgrep-1.2和asmsupport-0.3 這兩個新版本還為發布,后續也將補全新功能和bug陸續發布。 </p>

轉載于:https://my.oschina.net/wensiqun/blog/169494

總結

以上是生活随笔為你收集整理的浅说动态生成Class实现MVC的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕第一页在线播放 | eeuss一区二区三区 | 日韩成人一区二区三区 | 一区二区三区四区在线免费观看 | 亚洲中文字幕在线一区 | 成人性生交大片免费卡看 | 一本色道久久综合亚洲精品酒店 | 都市乱淫| 中文字幕一区二区三区日韩精品 | 香蕉视频污在线观看 | 舔花蒂 | 一本一道久久a久久精品综合 | 免费视频91蜜桃 | 少妇性l交大片 | 成人啪啪 | 日韩高清片 | 三上悠亚影音先锋 | 成人久久视频 | 六月丁香综合网 | 国产精品白嫩白嫩大学美女 | 欧美黑人一区二区三区 | 久久性爱视频网站 | 538国产精品视频一区二区 | 精品免费囯产一区二区三区 | 五月激情婷婷丁香 | 亚洲欧美综合 | 精品孕妇一区二区三区 | 亚洲男人天堂2024 | 国产视频二区三区 | 天天操天天干天天 | 91尤物视频 | 久久天天躁狠狠躁夜夜av | www.av麻豆 | 四川丰满少妇被弄到高潮 | 黑白配高清国语在线观看 | 中国人与拘一级毛片 | 日日干夜夜骑 | 美女扒开内裤让男人捅 | 精品自拍视频在线观看 | 日韩在线视频免费播放 | 欧美午夜不卡 | 久久久久久久伊人 | 人妻精品久久久久中文字幕 | 日韩wwww | 91情侣在线| 亚洲国产第一 | 噼里啪啦国语电影 | 人妻精品久久久久中文字幕69 | 久久精品中文 | 色av免费 | 久草热播| 亚洲黄在线观看 | 激情第四色 | 黄色录像片子 | av免费入口| 怡春院一区二区 | 成人黄色大片在线观看 | 亚洲一区精品视频在线观看 | 国产精品久久影视 | 免费在线观看国产精品 | 五月天精品 | 欧美特黄一级视频 | 亚洲理论在线 | 欧美夫妇交换xxx | 三级男人添奶爽爽爽视频 | 97se综合 | 国产夫妻在线视频 | 午夜小福利| 欧美aaa在线观看 | 久久精品国产亚洲av久 | 黄色av网页| 久久99精品国产.久久久久 | 国产美女福利 | 欧美爱爱小视频 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 久久视频一区二区 | 中文字幕永久在线视频 | 国产精品系列在线观看 | 无码人妻久久一区二区三区蜜桃 | 娇小的粉嫩xxx极品 国产精品人人爽人人爽 | 清清草免费视频 | 免费一区二区三区视频在线 | 日本精品视频一区 | 国产精品黄色av | 污视频91 | 午夜免费播放观看在线视频 | 一级大片黄色 | 精品无码久久久久久久久 | 超薄肉色丝袜一区二区 | 狠狠躁夜夜 | 亚洲av无码一区二区乱孑伦as | 91精品国产综合久久久密臀九色 | 99国产精品国产精品九九 | 亚洲色网址 | a毛片在线免费观看 | 欧美另类日韩 | 欧美老女人xx | 丝袜操| 久久丫精品 |