zoukankan      html  css  js  c++  java
  • AOP 和Spring.net

    前言:

              其实笔者在早三四年前就开始接触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");

  • 相关阅读:
    delphi调用存储过程
    mysql存储过程中使用事务
    高性能JAVA开发之内存管理
    高效的找出两个List中的不同元素
    The reference to entity "characterEncoding" must end with the ';' delimiter
    Maven的安装、配置及使用入门
    如何在电脑上测试手机网站(全)
    三种常用的js数组去重方法
    oracle ORA-01461 错误 can bind a LONG value only for insert into a LONG column
    windows cmd下netstat查看占用端口号的进程和程序
  • 原文地址:https://www.cnblogs.com/JohnTang/p/11108672.html
Copyright © 2011-2022 走看看