AOP的理解与实现

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                 });

 

 

上一篇:Dubbo 系列(07-5)集群容错 - Mock


下一篇:dubbo源码分析- 集群容错之Cluster(一)