自己实现简单的AOP(四)自动初始化代理对象
2018-06-18 04:44:37来源:未知 阅读 ()
前面三篇随笔,已经完成了AOP的核心功能,但 代理对象的初始化还是有些麻烦,本文将解决该问题。
Demo 片段如下:
public class HomeController : Controller { /// <summary> /// 使用 Autowired Attribute 自动初始化代理对象 /// </summary> [Autowired] public Service myService { get; set; } public ActionResult Index() { myService.Test(); var msg = myService.ErrorMsg; Console.WriteLine(msg); // 当然 ServiceException 中的 Code属性也可以存储在 ServiceAbstract 对象中 return View(); } }
如上的代码片段中,myService 并未被赋值,而是被直接使用调用了Test方法。那么 该属性是什么时候被赋值的呢?
答案是:MVC框架、Controller激活的时候。
在 MVC框架中,Controller的激活是在 DefaultControllerFactory 中完成的,重写该类,并将其进行注册,便可实现,在激活Controller的同时也将自动初始化代理对象。
以下是、Global.asax 代码:
// Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { // 注册新的Controller工厂 ControllerBuilder.Current.SetControllerFactory(new MyBatisControllerFactory()); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); } private class MyBatisControllerFactory : DefaultControllerFactory { public override IController CreateController(RequestContext requestContext, string controllerName) { IController controller = base.CreateController(requestContext, controllerName); /// 自动装配属性 /// <para>为属性对象启用代理,并延迟初始化被代理的对象</para> DelayProxyUtil.AutowiredProperties(controller); return controller; } } }
附源码:http://files.cnblogs.com/files/08shiyan/AOPDemo.zip
(自己实现简单的AOP 暂完、后续进行补充)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- 构建自己的jar包上传至Mvaen中央仓库和版本更新 2020-06-11
- Linux简单命令的学习 2020-06-10
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash