Spring AOP 应该是比较出名的了,今天说的是C#里的AOP,C#的AOP实现的方式有很多种,现在就先介绍静态代理的实现方案;
模拟场景:我们在删除用户,或者更新用户的时候进行数据原始备份,这样的话需要在删除操作进行之前进行一些数据相应的操作,但是我们又不想在删除操作里面做一些与删除无关的操作,这样使用AOP就解决这个问题了;更新操作也一样。
下面是示例代码(省略引用):
1、首先是实体类
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;
}
}
}
2、数据操作接口
namespace AOP_Test1
{
//接口,数据操作
public interface IUser
{
void delete(User user);
void update(User user);
}
}
3、接口实现
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("更新用户");
}
}
}
4、对IUser进行装饰
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());
}
}
}
5、测试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AOP_Test1
{
class Program
{
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);
}
}
}
6、测试结果:
【敬请批评指正】
分享到:
相关推荐
.net平台AOP的实现 .net平台AOP的实现 .net平台AOP的实现 .net平台AOP的实现 .net平台AOP的实现
aop在.net中的实现。。。。。。aop在.net中的实现aop在.net中的实现。。。。。。aop在.net中的实现
在net core2.2时,我当时就尝试过用autofac实现aop,但这次我不想用autofac,我用了一个更轻量级的框架,AspectCore。 用起来非常非常的简单,但一开始还是走了一点弯路,主要是网上都是net core3以下的教程,3以下...
包含2篇attribute高级应用文章,以及相应的代码。 代码关键处,都有详细注释。 看过后,你会对attribute,context有更深刻的认识
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
.net 下实现AOP.
NULL 博文链接:https://baobeituping.iteye.com/blog/964399
spect Oriented Programming(AOP),面向切面编程,是一个比较热门...AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
Encase 是C#编写开发的为.NET平台提供的AOP框架。Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率。
自己在网上找的一些关于.net下AOP的资料,给大家节省一些时间吧。
写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...
本文为大家介绍的了.NET下消息与AOP的实现。
Spring.net AOP 动态代理例子
spring.net aop 性能影响 在非单例模式下,了测试加入aop 后,对系统影响,测试时只加入aop,不实际记录日志。 测试介绍: http://blog.csdn.net/yangjian15/archive/2009/11/09/4790164.aspx
HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。
日历管理系统是用C#开发的,通过.NET平台下AOP的Postsharp增加了日志管理和异常处理的功能,附带的文档是关于AOP的技术文档。
利用特性,绑定上下文,代理,反射等技术动态截获异常,实现切面编程
一、AOP实现初步AOP将软件系统分为两个部分:核心关注点和横切关注点。核心关注点更多的是DomainLogic,关注的是系统核心的业务;而横切关注点虽与核心的业务实现无关,但它却是一种更Common的业务,各个关注点离散...
spring.net结合三层AOP异常日志记录功能
【ASP.NET编程知识】Asp.Net Core轻量级Aop解决方案:AspectCore.docx