动态代理实现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是这种:

未完待续。

。。。

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

  1. 深入浅出AOP(四)--AOP的实现步骤

    AOP是什么?有什么用处?怎么实现?在前面的博客中已经写的非常具体了,那么我们怎么一步一步考虑的呢? 在最初的时候,我们知道AOP是一个拦截业务.提供服务的东西.于是我们是这样做的: 后来又了加上了S ...

  2. [置顶] 深入浅出Spring(三) AOP详解

    上次的博文深入浅出Spring(二) IoC详解中,我为大家简单介绍了一下Spring框架核心内容中的IoC,接下来我们继续讲解另一个核心AOP(Aspect Oriented Programming ...

  3. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  4. 深入浅出Spring(三) AOP详解

    上次的博文深入浅出Spring(二) IoC详解中,我为大家简单介绍了一下Spring框架核心内容中的IoC,接下来我们继续讲解另一个核心AOP(Aspect Oriented Programming ...

  5. Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)

    在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...

  6. 深入浅出学习Spring框架(三):AOP 详解

    AOP的英文解释——AOPAspect Oriented Programming面向切面编程.主要目的是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 在反 ...

  7. SSH深度历险(五) 深入浅出-----IOC AND AOP

    IOC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统(容器)来控制实现,而不是在你的类内部控制.这称为控制反转. 本人理解:就是把原本你自 ...

  8. Spring深入浅出(四)AOP面向切面

    面向切面编程--AOP AOP(Aspect Oriented Programming),程序员称之为面向切面编程,是Spring框架除了IOC之外的另一个核心概念. AOP是对OOP(面向对象编程) ...

  9. Asp.Net Core Filter 深入浅出的那些事-AOP

    一.前言 在分享ASP.NET Core Filter 使用之前,先来谈谈AOP,什么是AOP 呢? AOP全称Aspect Oriented Programming意为面向切面编程,也叫做面向方法编 ...

随机推荐

  1. java使用数据库连接池

    连接池的实现方式是首先使用JNDI(JavaTM Naming and Directory Interface) 将数据源对象注册为一个命名服务,然后使用JNDI提供的服务接口,按照名称检索对应的数据 ...

  2. C++位域和内存对齐问题

    1. 位域: 1. 在C中,位域可以写成这样(注:位域的数据类型一律用无符号的,纪律性). struct bitmap { unsigned a : ; unsigned b : ; unsigned ...

  3. 纯html+css中实现静态选座位效果技巧(input+label使用小技巧)

    很多时候,我们想通过html+css的方式实现排列在后方的代码在选中状态下,能控制排列在前的代码的样式.那么要怎么实现呢?在这里我就要用1个小技巧来完成. 众所周知的,我们css中的选择器通常只能向下 ...

  4. 倍增实现LCA

    Today,we will talk about how to find The Least Common Ancestor. Now ,let us get into the business(正题 ...

  5. luogu P1238 走迷宫--DFS模板好(水)题

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  6. 同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致

    背景 今天遇到如下问题,同一sql语句在PLSQL Developer与SQL*PLUS工具中执行结果不一致, sql语句如下 SELECT 'GROUPHEALTH_SEND_EMAIL' as i ...

  7. python 03 8/25-8/27 range 、randint

    import random """字符串的操作中 三种方法,只包含左索引,不包含右索引""" hi= "bokeyuan pyth ...

  8. CSS3---关于背景

    1.background-origin:设置元素背景图片的原始起始位置. background-origin : border-box | padding-box | content-box;    ...

  9. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

  10. POJ 1144 Network (求割点)

    题意: 给定一幅无向图, 求出图的割点. 割点模板:http://www.cnblogs.com/Jadon97/p/8328750.html 分析: 输入有点麻烦, 用stringsteam 会比较 ...