深入浅出AOP(一)

动态代理实现AOP:

AOP其实很早之前按照做出来了一些东西,之所以不敢说做出来了,是因为它是什么?怎么实现?做出来的东西是不是?先前一直查资料,查到的资料跟着做,到后来发现,AOP越来越大,而很多资料跟AOP本身的思想有冲突的地方,所以还有很多要学习的地方。

AOP的作用:

可以动态的添加和删除在切面上的漏记而不影响原来的执行代码。

AOP代理实现:

静态代理实现:

用图说明一下下:

接口实体类:

<span style="font-size:18px;">    namespace AOP_Test1
    {
        //实体类
        public class User
        {
            public int id { get; set; }
            public String name { get; set; }
            public String password { get; set; }
            //重写方法
            public override string ToString()
            {
                return "id:" + id + ";name:" + name + ";password:" + password;
            }
        }
    }  </span>

接口类:

<span style="font-size:18px;">namespace AOP_Test1
{
    //接口,数据操作
    public interface IUser
    {
        void delete(User user);
        void update(User user);
    }
} </span>

真正的实现类:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;  

namespace AOP_Test1
{
    //IUser接口实现
    public class IUserImpl:IUser
    {
        public void delete(User user) {
            System.Console.WriteLine("删除用户");
        }
        public void update(User user) {
            System.Console.WriteLine("更新用户");
        }
    }
} </span>

静态代理类:

<span style="font-size:18px;">    namespace AOP_Test1
    {
        //IUser装饰类
        public class IUserDecorator : IUser
        {
            public IUser iuser { get; set; }
            public IUserDecorator(IUserImpl iUserImpl)
            {
                iuser = iUserImpl;
            }  

            //删除
            public void delete(User user)
            {
                beforeDelete(user);
                iuser.delete(user);
                afterDelete();  

            }
            protected void beforeDelete(User user)
            {  

                Console.WriteLine(DateTime.Now + ":删除之前进行数据备份:");
                Console.WriteLine("备份数据:" + user.ToString());
            }
            protected void afterDelete()
            {
                Console.WriteLine("删除操作完成.");
            }  

            //更新
            public void update(User user)
            {
                beforeUpdate(user);
                user.name = "TanWeijie";
                iuser.update(user);
                afterUpdate(user);
            }  

            protected void beforeUpdate(User user)
            {  

                Console.WriteLine(DateTime.Now + ":更新之前进行数据备份:");
                Console.WriteLine("更新前数据:" + user.ToString());
            }
            protected void afterUpdate(User user)
            {
                Console.WriteLine("更新操作完成.");
                Console.WriteLine("更新后数据:" + user.ToString());
            }
        }
    }  </span>

运行时:

<span style="font-size:18px;">        static void Main(string[] args)
        {
            User user = new User();
            user.id = 1;
            user.name = "Tan";
            user.password = "123456";  

            IUser iuser = new IUserDecorator(new IUserImpl());
            iuser.delete(user);
            Console.WriteLine();
            iuser.update(user);
        }  </span>

在上面我们可以看到,这是AOP的一个初步的模型,或者说这个不是真正意义上的AOP。

总结

上面的代码AOP是这样实现的:

而其实最简单的AOP是这样的:

未完待续。。。。。

时间: 2025-01-01 06:14:23

深入浅出AOP(一)的相关文章

深入浅出AOP(二)--IOC容器

上一篇,用的静态代理实现了AOP,实际上,AOP就是一种思想,实现的方式有很多种,而要实现AOP,将提供的非业务类的方法(服务类)放在容器中,更加高级一点. IOC就是提供了一种容器. AOP+IOC实现: 整体的解决方案: 在这个里面,我们首先写Model: <span style="font-size:18px;">using System; using System.Collections.Generic; using System.Text; namespace S

深入浅出AOP(三)--WCF+AOP

Spring.NET的IOC容器解决的,就是如何在应用中将类.对象和服务组合成应用程序的问题.IOC容器通过很正统的方式将分散的组件组合成完整的应用程序.Spring.NET框架就应运而生了. 框架图: 其中Spring.NET Core是整个矿机阿德基础,实现了依赖注入的功能.Spring.AOP为业务对象提供面向切面编程的支持.Spring.WEB提供了客户端.Spring.Services允许将服务发布为企业服务或远程服务(WCF).Spring.Data定义了一个抽象的数据访问层,可以跨

Java深度历险(四) 深入浅出-----IOC AND AOP

IOC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统(容器)来控制实现,而不是在你的类内部控制.这称为控制反转. 本人理解:就是把原本你自己制造,使用的对象,现在交由别人制造,而通过构造函数(容器来管理),setter方法或方法(这里指使用这个对象的方法)参数的方式传给自己,由自己使用. 实例说明形象理解IOC 要设计一个Girl和一个Boy类,其中Girl有recognize方法,即Girl想要recognize一个Boy.那么,我

深入浅出Struts2+Spring+Hibernate框架

一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司节省了不少的人力成本. 为什么使用Struts2? struts2实现了视图与业务应用逻辑的解耦(软件工程的高内聚,低耦合原则). 在Model 1时代,开发web项目我们都是在JSP里写入处理业务逻辑的JAVA代码,尤其像涉及到数据库和页面form表单数据之间交互的时候,每次都要写连接.查询.增加

Spring中的AOP

在上一篇博客中,我们讲了Spring的IOC,以下,我们继续解说Spring的还有一个核心AOP AOP: 在软件业,AOP为Aspect Oriented Programming的缩写.意为:面向切面编程,通过预编译方式和执行期动态代理实现程序功能的统一维护的一种技术. AOP也是Action Oriented Programming 的缩写,意为:面向切面编程,是函数式编程的一种衍生范型.AOP在其它领域也有其它含义. AOP的具体解释: 还是老规矩,站在巨人的肩膀上,看看其它人对AOP的理

深入浅出Mybatis-与Spring集成

深入浅出Mybatis-与Spring集成 目录(?)[+] 单独使用mybatis是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用. 前置要求 版本要求 项目 版本 下载地址 说明 mybatis 3.0及以上 https://github.com/mybatis/mybatis-3/releases spring 3.0及以上 http://projects.spring.io/

深入浅出Spring(二) IoC详解

上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 它还有一个名字叫做依赖注入(Dependency Injection)

死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator

通过前一篇<死磕Spring AOP系列1:编程式实现AOP>,学习了Spring对代理的底层支持,认识了ProxyFactory对象,及从类设计层面认识了PointCut&Advisor&Advice&Interceptor,还认识了AdvisorChainFactory对象,知道了底层Advisor的底层链式结构.但是,上篇我们仅仅是通过Spring编程式实现的"AOP"效果,这种方式,实际开发时,如果这样用就太LOW了.今天,主要认识一个生成代

(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出

(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安川 前言 本篇文章并没有太多WebWork 的实战代码细节.本人非常希望能充当一名导游的角色,带领读者逐步游览WebWork的功能特性和原理.在第一章,我们将提出基于三层架构的Web层需要解决的10个问题,这是本文的纵轴.围绕着纵轴,我们按照横轴的顺序逐步描述讲解:WebWork简介.WebWork入门.We