码迷,mamicode.com
首页 > 其他好文 > 详细

AOP的理解与实现

时间:2019-12-13 00:07:33      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:框架   缓存   功能   权限   使用   use   col   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                 });

 

 

AOP的理解与实现

标签:框架   缓存   功能   权限   使用   use   col   public   动态创建对象   

原文地址:https://www.cnblogs.com/fanfan-90/p/12032152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!