IT技術互動交流平台

AOP麵向切麵編程簡介

發布日期__东北二嫂水仙百度云:2016-12-22 20:36:26

AOP這個詞相信大家都沒有接觸太多過|_锦龙堂,但是實際上你們已經有所接觸了_-0567彩票,就在設計模式中||长江电力商务网。AOP所用的思想其實和設計模式是一樣的|__注册彩票平台的邀请码是干嘛滴,即在不修改原代碼的情況下統一增加或者修改功能___川师附中高中部地址。還有__|永利网投平台,AOP大多用在spring裏麵_|_圣元积分网,但是本文所寫的隻是在MVC中的應用_|-座机电话费查询,要注意--7kk7小游戏。


一|-|苦雨孤灯、簡介

所謂AOP(Aspect Oriented Programming的縮寫)意為

麵向切麵的編程--不思议游戏国语版,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術__译乐通。AOP是OOP的延續|__尹国驹和向华强,是軟件開發中的一個熱點-_-重生一惹火娇医,也是Spring框架中的一個重要內容__|自制室外电视天线,是函數式編程的一種衍生範型_--易赢彩票网址下载。利用AOP可以對業務邏輯的各個部分進行隔離--小型飞机发动机,從而使得業務邏輯各部分之間的耦合度降低-三易网络,提高程序的可重用性|诺基亚e66手机qq,同時提高了開發的效率-王晗祥康快车。

以上是百度百科的官方解釋|云顶彩票怎么样,但是在我看來|||语笑今生,其實AOP更多的是一種思想|金色笔记,一種可以動一發而通全身的思想--|珍爱十字绣花开富贵,AOP其實麵對的更多是一種同意的功能或者調用過程來進行編寫的一種程序體--bt核电站,從它的第一個詞Aspect(切麵)也就是指的一個方麵|_欧式蒙牛奶粉事件,也可以了解到這種方式也就是針對一個方麵的實現|--至尊争霸彩票是真的吗,這一點其實和mvc中的global文件很像-青岛火车站咨询电话,也是Spring框架中的一個重要內容|_肖志恒简历,是函數式編程的一種衍生範型|-注册自动送17彩金y3。利用AOP可以對業務邏輯的各個部分進行隔離___舞龙的意义,從而使得業務邏輯各部分之間的耦合度降低|__掌上恭城下载平台,提高程序的可重用性|_众益彩票合法吗,同時提高了開發的效率__纽培乐。

其次就是它的預編譯性質可以很好的處理一些錯誤或者是預先判斷一些情況--殷佳心,這也導致了它在設計的時候在判斷權限_||东北二嫂水仙,統一輸出某個東西方麵變得比較常見__|约彩彩票注册失败。“可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術_金坛阳光旅行社。AOP實際是GoF設計模式的延續--千山暮雪浴缸吻戏,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,提高代碼的靈活性和可擴展性||街头篮球showtime,AOP可以說也是這種目標的一種實現|-|hp5100驱动。”上麵這句話也是對於AOP的很好的詮釋-||柯达广告语。

二__易彩堂为什么提现不了、在MVC中的實現

說了這麼多了--大成基金2020,讓我們來實戰一下吧__-易拍宝,首先我們需要在vs新建一個mvc的項目|_南京锐度,選擇MVC3或者是4都OK|--158彩票在线娱乐,然後建立一個controller||黑龙江旱情,命名隨意__|金雅中星音译歌词,然後建立他的視圖--郑州基础教育教研网,在視圖上寫上最簡單的HelloWorld-|_72街返利网。

 

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        <a>Hello! World</a>
    </div>
</body>
</html>


 

右圖是我創建好的MVC解決方案和添加好的controller還有view--|139期香港内部传真,在view中寫入上麵的代碼以顯示Hello_-哪有那种电影!World--非主流伤感个人说明。

運行之後(不會運行的自行百度)是不是就顯示出了一個HelloWorld的字樣在網頁上呢?

好---4466k最近10天更新,接下來我們開始新建AOP的一個文件然後去使用-_无忧代理器,首先在本項目中新添加一個類--078彩票网,名字叫FilterPublic__赢彩彩票与你同行开奖,在引用的地方添加using System.Web.Mvc這個引用__太钢代理商,然後讓這個類繼承於ActionFilterAttribute_-云购彩票违法吗,大家要注意Action這個詞__-运盛彩票pk10计划,說明這個東西是基於動作的__铲形币是哪国的。

然後我們寫入以下代碼||钓鱼岛ppt:

 

        public string Message { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            filterContext.HttpContext.Response.Write("Action執行之前" + Message + "<br />");
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            filterContext.HttpContext.Response.Write("Action執行之後" + Message + "<br />");
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之前" + Message + "<br />");
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之後" + Message + "<br />");
        }

這個裏麵就是Filter觸發的各種動作--李天一受害老师照片,然後我們在controller裏麵的默認方法做以下修改||306手机彩票:

 

 

        [FilterPublic(Message = "Action")]
        public ActionResult Index()
        {
            HttpContext.Response.Write("Action正在執行···<br />");
            return Content("正在返回Result···<br />");
        }

然後在controller的class類上麵也添加一句[FilterPublic(Message = "Controller")]--_veor moda,然後運行__至尊伏魔录隐藏英雄,會出現什麼結果呢--永胜国际靠谱吗?

 

 

Action執行之前Action
Action正在執行···
Action執行之後Action
返回Result之前Action
正在返回Result···
返回Result之後Action

 

可以看到controller裏麵的方法在執行之前會去先執行以下我們設置的FilterPublic裏麵的代碼|_-重庆陈思宇,而且隨著裏麵動作發生時間不同也可以看出了都是哪個方法被觸發了-霍炽昌。

但是在controller上麵寫的基於controller的方法卻沒有觸發|_银盘服务是什么,這是為什麼呢?

其實這個問題很簡單_|_奥鹏教育学生请进,就是我們在設置我們的AOP程序的時候沒有進行參數的設置_|车商汇登陆,沒有讓filter進行疊加的運行|优衣库完整版,這個時候我們隻要在寫的FilterPublic類的上麵加上_洪荒太极:[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]_|-永盛时时彩,就可以讓你設置的各種filter或者疊加的filter進行觸發了_||步步惊情港台版,這個時候我們再運行一下試試-工作总结结尾怎么写:

 

Action執行之前Controller
Action執行之前Action
Action正在執行···
Action執行之後Action
Action執行之後Controller

返回Result之前Controller
返回Result之前Action
正在返回Result···
返回Result之後Action
返回Result之後Controller

這樣一來_-闽江学院教务管理系统,在controller上的Filter也被觸發了||2004cad免费下载,所以我們使用AOP的方法隻需要在我們自己的寫的方法或者頁麵默認的加載方法上麵寫上一個filter類的標簽就可以了-_|诺顿免费激活码。

 

那麼_|_大中电器总部电话,如果我們有個功能需要所有的頁麵都觸發-|-zooskooistay人与驴,這樣豈不是也很麻煩麼--透明售房网杭州?別擔心___12306智行火车电话,這個時候就輪到我們的global文件發揮作用了|_自制蘑菇云。在global.asax文件下麵的RegisterGlobalFilters方法下麵注冊自己寫的Filter就可以了|__湖南移动梦网营业厅:

 

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    //把自己的filter定義成全局的filter
    filters.Add(new FilterPublic() { Message = "全局<br/>" });

}

然後運行-|-cctv10真相怪兽之谜,看結果_--保定38军:

 

 

Action執行之前全局

Action執行之前Controller
Action執行之前Action
Action正在執行···
Action執行之後Action
Action執行之後Controller
Action執行之後全局

返回Result之前全局

返回Result之前Controller
返回Result之前Action
正在返回Result···
返回Result之後Action
返回Result之後Controller
返回Result之後全局

這樣全局的觸發也就做好了(filter中的message隻是用於標識層級的--农行黄金价格,正式用的時候可以不用定義-__暧昧的颜色。)

 

這樣一看-_n81软件下载,如果想要快速的添加一個全局都用的方法_|正三棱锥的定义,隻需要新建一個Filter-__132彩票com苹果版,然後再改一下global文件就可以辦到了|青岛火车站订票,是不是很方便呢-093网络彩票。


以上均為本人對於AOP的一些淺淺的研究|舒南,如有錯誤的地方還請讀者指正_|哈雷摩托车报价。

延伸閱讀|青岛航空快线商务酒店:

Tag標簽_|_物合网: 切麵   簡介  
  • 專題推薦

  • 李華明iOS-Cocos2d遊戲開發專題
  • 本教程為 李華明 編著的iOS-Cocos2d遊戲開發係列教程---105彩票天天有红包抢吗:教程涵蓋關於i...... 詳細
  • Directx11 遊戲編程入門教程
  • 專題主要學習DirectX的初級編程入門學習__-别克赛欧srv怎么样,對Directx11的入門及初學者有...... 詳細
  • Windows7係統入門 優化 技巧技術專題
  • Windows7係統專題 無論是升級操作係統|--观澜阳光花园、資料備份-爱划算、加強資料的安全及管...... 詳細
About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
北京赛车pk106号彩票福德正神彩票500万彩票pc蛋蛋博发彩票

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!