码迷,mamicode.com
首页 > 编程语言 > 详细

AOP 和Spring.net

时间:2019-11-14 16:41:46      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:异常   思考   family   auto   user   面向切面编程   实例   lte   public   

前言:

          其实笔者在早三四年前就开始接触AOP, 但是一直未曾真正理解,当你开始理解就会明白使用它的好处,

这也是笔者花费挺长时间开始慢慢反省所得,希望在以后撸代码的日子里,多做思考而不是做个搬码的机器, 笔者在项目中使用的Spirng.net。

 

什么是AOP?AOP和OOP有什么关系?

     AOP面向切面编程,它允许开发者动态的修改静态的OO模型。在运行时,动态的将代码切入到类的指定方法指定位置上

 AOP和OOP的关系:个人觉得它是OOP思想的一种补充,打个比方,OOP是上下,AOP则兼顾左右

  正因为可以动态的扩展功能,所以在程序设计时就可以有以下好处:

1 聚焦核心业务逻辑,权限/异常/日志/缓存/事务, 通用功能可以通过AOP方式添加,程序设计简单,

2 功能动态扩展;集中管理,代码复用;规范化

 

.NET常用的实现AOP 的框架有哪些?

就笔者所知道的而言:AutofacSpring.NetCastleUnity

 

 

 

实现AOP的几种方式:

1.静态实现--装饰器/代理模式

2.动态实现--Remoting/Castle(Emit)

3.静态织入--PostSharp(收费)--扩展编译工具,生成的加入额外代码

4.依赖注入容器的AOP扩展(开发)

5.MVCFilter--特性标记,然后该方法执行前/后就多了逻辑

 

   invoker调用中心--负责反射调用方法--检查特性--有则执行额外逻辑

 

静态实现-装饰器/代理模式  代码示例:

 

      /// <summary>
        /// 装饰器模式实现静态代理
        /// AOP在方法前后增加自定义的方法
        /// </summary>
     public  class DecoratorAOP
        {

            public static void Show()
             {
                 User user = new User()
                 {
                     Name = "John",
                     Password = "123123123123"
                 };
                 IUserProcessor processor = new UserProcessor();
                 processor.RegUser(user);
                 Console.WriteLine("***************");
            //实例化UserProcessorDecorator这是构造方法
            //需要IUserProcessor类型的参数
                 processor = new UserProcessorDecorator(processor);
                 processor.RegUser(user);
           }

            public interface IUserProcessor
            {
                void RegUser(User user);
            }

            public class UserProcessor : IUserProcessor
            {
            public void RegUser(User user)
            {
                Console.WriteLine("用户已注册。Name:{0},PassWord:{1}", user.Name, user.Password);
            }
            }

        public class UserProcessorDecorator : IUserProcessor
        {

            private IUserProcessor _UserProcessor { get; set; }
            public UserProcessorDecorator(IUserProcessor userprocessor)
            {
                this._UserProcessor = userprocessor;
            }
            public void RegUser(User user)
            {
                BeforeProceed(user);

                this._UserProcessor.RegUser(user);

                AfterProceed(user);
            }

            /// <summary>
            /// 业务逻辑之前
            /// </summary>
            /// <param name="user"></param>
            private void BeforeProceed(User user)
            {
                Console.WriteLine("方法执行前");
            }
            /// <summary>
            /// 业务逻辑之后
            /// </summary>
            /// <param name="user"></param>
            private void AfterProceed(User user)
            {
                Console.WriteLine("方法执行后");
            }

        }

 

 

 

再来谈谈Spring.net

  Spring.Net从根本意义上来说,是对Spring工具从Java平台向.Net平台的完全移植。它在AOP的实现上与Spring几乎完全相似,

仍然利用了AOP联盟提供的拦截器、Advice等实现AOP。Spring.Net的配置文件也与Spring相同。

 

伪代码示例:

//Spring文件夹下的配置文件,type中第一个是完整类名,第二个是命名空间名
<object id="LaborSuppliesDAL" type="xxx.DAL.LaborSuppliesDAL,xx.LaborSuppliesManage.DAL" autowire="autodetect" singleton="false"></object>

//读取配置的LaborSuppliesDAL类,此时已经把LaborSuppliesDAL这个类切入到某个类中了,如果想要使用LaborSuppliesDAL的某个方法,直接通过_dal.方法名就行
private
readonly LaborSuppliesDAL _dal = SpringReg.SpringInfo<LaborSuppliesDAL>("LaborSuppliesDAL");

 

AOP 和Spring.net

标签:异常   思考   family   auto   user   面向切面编程   实例   lte   public   

原文地址:https://www.cnblogs.com/JohnTang/p/11108672.html

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