近日由于业务需要,接触了一些Flex下的东西,比如Mate框架(一个集成MVC和IOC的框架,其事件广播机制很强大),疏于整理spring.net学习资料,现在终于得闲,将心得梳理一下:
spring.net是java下大名鼎鼎的spring框架移植到.net的开源项目,且借助于.net强大的反射机制,甚至拥有比原java版本更强大的功能。
那它能用来做什么呢?核心功能就是IOC和AOP:
IOC(Inversion of Control),字面意思为“反转控制”,我更倾向于理解为“依赖注入”,意思就是说:在基于接口开发的情况下,我们会对需要的业务处理对象(数据访问,业务逻辑等)一一做上接口,前端使用时只是对接口的调用,而并不关心具体是什么类具体去实现了这个接口~听起来似乎不可能,是的,如果没有IOC,这是不可能的事情,我们的前端逻辑和后端实现是紧紧耦合的,做页面开发的人必须知道哪一个类(.cs文件)拥有哪些方法,即便是基于接口,我们也依然要在程序里去实例化它,形如:
Code
[Codehighlighter] id=www.pin5i.com style='BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee'[Codeleft][Coderight][Codedv][Codeleft][Coderight]!--[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]Code highlighting produced by Actipro CodeHighlighter (freeware)[Coderight][Codeb][Codeleft]http://www.pin5i.com[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]--[Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]IManager mgr [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]=[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]new[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] DataManager();[Coderight]/[Codesp][Codeleft][Coderight]/[Codedv][Codeleft][/Codehighlighter]
无形中,基于接口开发成了鸡肋,前端开发人员几乎要知道一条龙的编码流程才能做业务开发!(当然,有的项目就是一个人在做)
好吧,那就使用IOC,它是怎么解开这个耦合关系的?
IOC框架一般会维护一个配置文件,它大概要完成的使命是:
1、将实现接口的对象进行列表,表示它们是被页面需要的;
2、把页面的以基于URL的形式进行列表,表示它们是需求方。
余下的事情,是框架来进行协调,在页面上声明一下某一个接口的对象,在它需要实例化时,IOC框架会自动将对应的接口实现进行注入。如下就是一个Spring.net的配置范例片断:
Code
[Codehighlighter] id=www.pin5i.com style='BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee'[Codeleft][Coderight][Codedv][Codeleft][Coderight]!--[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]Code highlighting produced by Actipro CodeHighlighter (freeware)[Coderight][Codeb][Codeleft]http://www.pin5i.com[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]--[Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]业务相关[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]id[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="ArtistDaoSpring"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="woodigg.DAO.ArtistDaoSpring,woodigg.DAO"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] autowire[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="byName"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]页面调用[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="~/Admin/Artist/MgrArt.aspx"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] autowire[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="byName"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight]/[Codedv][Codeleft][/Codehighlighter]
再看看页面里的声明和调用片断:
Code
[Codehighlighter] id=www.pin5i.com style='BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee'[Codeleft][Coderight][Codedv][Codeleft][Coderight]!--[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]Code highlighting produced by Actipro CodeHighlighter (freeware)[Coderight][Codeb][Codeleft]http://www.pin5i.com[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]--[Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Data;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Configuration;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Collections.Generic;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web.Security;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web.UI;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web.UI.WebControls;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web.UI.WebControls.WebParts;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Web.UI.HtmlControls;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Text;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.model;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.Interface.DAO;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.bll.Tool;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Spring.Context;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Spring.Context.Support;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]public[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]partial[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]class[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Admin_Artist_MgrArt : AdminPage[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_469_839_Open_Image" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_469_839_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_469_839_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_469_839_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_469_839_Closed_Image" src="/Images/OutliningIndicators/ContractedBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_469_839_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_469_839_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_469_839_Open_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_469_839_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_469_839_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_475_676_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_475_676_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_475_676_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_475_676_Open_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_475_676_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_475_676_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_475_676_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_475_676_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_475_676_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF;"[Codeleft]注入对象[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_475_676_Open_Text" style="display: none;"[Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]#region[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] 注入对象[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]private[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] IArtistDAO _ArtistDaoSpring;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]public[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] IArtistDAO ArtistDaoSpring[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_571_661_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_571_661_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_571_661_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_571_661_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_571_661_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_571_661_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_571_661_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_571_661_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_571_661_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_571_661_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_585_613_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_585_613_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_585_613_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_585_613_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_585_613_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_585_613_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_585_613_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_585_613_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]get[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_585_613_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_585_613_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{ [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]return[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] _ArtistDaoSpring; }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_626_655_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_626_655_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_626_655_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_626_655_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_626_655_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_626_655_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_626_655_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_626_655_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]set[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_626_655_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_626_655_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{ _ArtistDaoSpring [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]=[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] value; }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]#endregion[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]protected[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]void[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Page_Load([Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] sender, EventArgs e)[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_739_837_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_739_837_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_739_837_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_739_837_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_739_837_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_739_837_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_739_837_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_739_837_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_739_837_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_739_837_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] GridView1.DataSource [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]=[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]ArtistDaoSpring.GetAllArtists();[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] GridView1.DataBind();[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"/[Codeleft]}[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight]/[Codedv][Codeleft][/Codehighlighter]
如果是初次接触IOC,可能理解起来会有些生涩,毕竟是个基于配置的框架,有些东西需要深入了解,这个以后可以一步步探个究竟。OK,接着就是AOP。
那么AOP又是做什么的呢?Aspect Oriented Programming,字面意思即为“面向切面的编程”。Aspect,就是切面,代表了我们很多项目中重复开发的模块,如邮件功能,日志功能等。
说起来是会让人很颓废的,我们花费在重复劳动上的时间,有时太多了。这个项目写日志,下一个还写日志,日志有区别吗?答案是没有,但它就是需要,哪怕是复制粘贴,还是需要!被需要当然是好事,说明它存在的价值,但能否把这样的东西做成一个组件,以后拿来就用,并且与新的项目系统人我两不犯,无缝集成?
当然是可以的,AOP在此时的价值会得到充分的体现。就我个人而言,对它的理解,更多的是一个监听器,侦测你的业务是否有相关的需要,只要你有需要发出,AOP框架就会在你需要的地方设一个断点,进行功能模块的切入,让它去做你希望它做的事。就这么神奇~
这里放出一个代码片断,小小注解一下以上比较让人头晕的概念:
Code
[Codehighlighter] id=www.pin5i.com style='BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee'[Codeleft][Coderight][Codedv][Codeleft][Coderight]!--[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]Code highlighting produced by Actipro CodeHighlighter (freeware)[Coderight][Codeb][Codeleft]http://www.pin5i.com[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]--[Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Collections.Generic;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Text;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] System.Reflection;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.model;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.DAO;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Spring.Aop;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]using[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] AopAlliance.Intercept;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]namespace[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] woodigg.bll[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_202_635_Open_Image" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_202_635_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_202_635_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_202_635_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_202_635_Closed_Image" src="/Images/OutliningIndicators/ContractedBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_202_635_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_202_635_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_202_635_Open_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_202_635_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_202_635_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_208_254_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_208_254_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_208_254_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_208_254_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_208_254_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_208_254_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_208_254_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_208_254_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_208_254_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]/**/[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_208_254_Open_Text"[Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft]///[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft]<summary>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft]///[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft] 环绕通知[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft]///[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft]</summary>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #808080;"[Codeleft][Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]public[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]class[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] whenUserSaveAdvice : IMethodInterceptor[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_315_633_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_315_633_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_315_633_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_315_633_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_315_633_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_315_633_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_315_633_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_315_633_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_315_633_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_315_633_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]public[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Invoke(IMethodInvocation invocation)[Coderight][Codeb][Codeleft][Coderight][Codeim] id="Codehighlighter1_384_627_Open_Image" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_384_627_Open_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_384_627_Closed_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_384_627_Closed_Text[CodegetElem2][Codeinline]"/[Codeleft][Coderight][Codeim] id="Codehighlighter1_384_627_Closed_Image" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" style="display: none;" [Codeclick]="this[Codenone] [CodegetElem1]Codehighlighter1_384_627_Closed_Text[CodegetElem2][Codenone] [CodegetElem1]Codehighlighter1_384_627_Open_Image[CodegetElem2][Codeinline] [CodegetElem1]Codehighlighter1_384_627_Open_Text[CodegetElem2][Codeinline]"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_384_627_Closed_Text" style="border: solid 1px #808080; background-color: #FFFFFF; display: none;"[Codeleft]...[Coderight]/[Codesp][Codeleft][Coderight][Codesp] id="Codehighlighter1_384_627_Open_Text"[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]{[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] User user [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]=[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] (User)invocation.Arguments[[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800080;"[Codeleft]0[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]];[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] Logger.ErrorLog(invocation.Method.Name, user.Name, user.Name);[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]//[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]真正的调用目标方法,并得到返回值[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] Object obj [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]=[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] invocation.Proceed();[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/InBlock.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]return[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] obj;[Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"/[Codeleft] }[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"/[Codeleft]}[Coderight]/[Codesp][Codeleft][Coderight]/[Codesp][Codeleft][Coderight]/[Codedv][Codeleft][/Codehighlighter]
这一代码片断实现的功能是:如果发现系统中新增了一个用户(即User的业务管理器调用了Save方法),那么在日志系统中,存储一下用户名,让管理员可以在翻日志时知道谁又加入了~
当然,就这么一段代码并不能完成这个监控功能,同样的,我们必须做配置(Spring.net把开发提高到了对配置进行管理的境地,你在配置管理上花的时间,将大于以往,好处是更关注和贴近业务而不是代码),告诉AOP框架,我们希望监听哪些对象的哪些动作,以及监听到后我们要调用哪些模块来采取行动:
Code
[Codehighlighter] id=www.pin5i.com style='BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee'[Codeleft][Coderight][Codedv][Codeleft][Coderight]!--[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]Code highlighting produced by Actipro CodeHighlighter (freeware)[Coderight][Codeb][Codeleft]http://www.pin5i.com[Coderight][Codeb][Codeleft][Coderight][Codeb][Codeleft]--[Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]被代理的对象userDAO[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]id[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="userDAO"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="woodigg.DAO.UserDAO"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] singleton[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="false"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]constructor-arg [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="woodigg.model.User"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]ref [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="user"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]constructor-arg[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft][Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]切面通知[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]id[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="adviceSave"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="woodigg.bll.whenUserSaveAdvice,woodigg.bll"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]切入点[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]id[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="advisor"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="Spring.Aop.Support.NameMatchMethodPointcutAdvisor,Spring.Aop"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]name[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="MappedNames"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]list[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]save*[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]list[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]name[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="advice"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] ref[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="adviceSave"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]<!--[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]代理对象[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #008000;"[Codeleft]-->[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft] [Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]id[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="proxyUserDAO"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] type[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="Spring.Aop.Framework.ProxyFactoryObject,Spring.Aop"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]name[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="proxyInterfaces"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]woodigg.Interface.DAO.IUserDAO[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]name[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="interceptorNames"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]list[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft]advisor[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]value[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]list[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]name[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="target"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]<[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]ref [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]="userDAO"[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #FF0000;"[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]/>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]property[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #000000;"[Codeleft][Coderight][Codeb][Codeleft][Coderight][Codeim] src="/Images/OutliningIndicators/None.gif" align="top"/[Codeleft] [Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]</[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #800000;"[Codeleft]object[Coderight]/[Codesp][Codeleft][Coderight][Codesp] style="color: #0000FF;"[Codeleft]>[Coderight]/[Codesp][Codeleft][Coderight]/[Codedv][Codeleft][/Codehighlighter]
也许这样的配置片断更让人犯晕,没关系,习惯了就好,有些事情需要我们自己去做(DB,ENTITY,DAO,BLL开发),有些事情需要的是我们去理解(AOP框架,通知,切面,代理对象),相信不需要多长时间,这些都不是问题。
关于IOC和AOP,以上只是寥寥几笔带过,在以后的实例系列中,将各个击破
实例主要围绕的是一个音乐网站的搭建(有点儿像AllMusic内样的,而不同于别的什么无聊SNS社区),会涉及的内容是:Spring.net、nHibernate、codeSmith模板、多对多表结构、Castle MonoRail(虽然有人强建不建议把MonoRail集成到Spring.net中,但我至今没找到.net 2.0下好的MVC解决方案,用用MonoRail有助于更好理解MVC,优化性能)。

附件:
您所在的用户组无法下载或查看附件(文/moye 出处/博客园)
| 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。 |