ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AOP的理解与实现

2019-12-12 22:51:01  阅读:232  来源: 互联网

标签:实现 void System 理解 AOP invocation using public


AOP:面向切面编程,在不破坏原有代码的情况下,提供新的功能。可以使用AOP添加通用功能,比如事务、日志、权限、异常、缓存...

 

常见的AOP:

MVC中的过滤器、HttpModule...

 

如何实现AOP:

1、装饰器模式,装饰器模式就是为对象动态扩展新功能,并且不修改原有类,所以它算是AOP,但是成本高(静态)

2、使用动态代理,动态创建对象。(动态)

3、DI框架中,由于对象是通过容器创建的,所以很容易实现AOP

 

案例1,动态代理实现AOP:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using Castle.DynamicProxy;//Castle.Core
 8 
 9 namespace MyAOP
10 {//业务类接口
11         public interface IUserProcessor
12         {
13             void RegUser(User user);
14         }
15     //业务类
16         public class UserProcessor : IUserProcessor
17         {
18             /// <summary>
19             /// 必须带上virtual
20             /// </summary>
21             /// <param name="user"></param>
22             public virtual void RegUser(User user)
23             {
24                 Console.WriteLine($"用户已注册。Name:{user.Name},PassWord:{user.Password}");
25             }
26         }
27     //AOP逻辑
28         public class MyInterceptor : IInterceptor
29         {
30             public void Intercept(IInvocation invocation)
31             {
32                 PreProceed(invocation);
33                 invocation.Proceed();
34                 PostProceed(invocation);
35             }
36             public void PreProceed(IInvocation invocation)
37             {
38                 Console.WriteLine("方法执行前");
39             }
40 
41             public void PostProceed(IInvocation invocation)
42             {
43                 Console.WriteLine("方法执行后");
44             }
45         }
46 }
1 var interceptor = new MyInterceptor();
2                 UserProcessor userprocessor = new ProxyGenerator().CreateClassProxy<UserProcessor>(interceptor);
3                 userprocessor.RegUser(new User
4                 {
5                     Name = "aaa",
6                     Password = "123456"
7                 });

 

 

标签:实现,void,System,理解,AOP,invocation,using,public
来源: https://www.cnblogs.com/fanfan-90/p/12032152.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有