AOP(代理模式)
利用特性Attribute+反射+代理类实现AOP
一、定义自定义特性
/// <summary>
/// 自定义特性,方法执行前调用
/// </summary>
public class CustomBeforeAttribute : Attribute
{ }
/// <summary>
/// 自定义特性,方法执行后调用
/// </summary>
public class CustomAfterAttribute : Attribute
{ }
二、给测试类的方法打上自定义特性标记
/// <summary>
/// 自定义测试类
/// </summary>
public class CustomAopClass
{
[CustomBefore]
[CustomAfter]
public void DoAction()
{
Console.WriteLine("DoAction");
}
}
三、实现测试类的代理类
/// <summary>
/// 测试类代理类
/// </summary>
public class CustomAopClassProxy
{
private CustomAopClass customAopClass; public CustomAopClassProxy()
{
customAopClass = new CustomAopClass();
} public void DoAction()
{
MethodInvoke("DoAction",
() =>
{
Console.WriteLine("DoAction Before");
},
() =>
{
Console.WriteLine("DoAction After");
});
} private void MethodInvoke(string methodInfo, Action DoActionBefore, Action DoActionAfter)
{
var type = customAopClass.GetType();
var method = type.GetMethod(methodInfo);
//检测有没有标记CustomBefore特性
var HasBeforeAop = method!.GetCustomAttribute(typeof(CustomBeforeAttribute));
if (HasBeforeAop != null)
{
DoActionBefore();
}
//执行当前方法
method!.Invoke(customAopClass, null);
//检测有没有标记CustomAfter特性
var HasAfterAop = method!.GetCustomAttribute(typeof(CustomAfterAttribute));
if (HasAfterAop != null)
{
DoActionAfter();
}
} }
测试
//AOP 自定义特性
CustomAopClassProxy aopClassProxy = new CustomAopClassProxy(); aopClassProxy.DoAction();

AOP(代理模式)的更多相关文章
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- Spring AOP /代理模式/事务管理/读写分离/多数据源管理
参考文章: http://www.cnblogs.com/MOBIN/p/5597215.html http://www.cnblogs.com/fenglie/articles/4097759.ht ...
- AOP代理模式
AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能.最常见的就是事务控制.工作之余,对于使用的工具,不免需要了解其所以然.学习了一下,写了些程序帮助理解. ...
- Spring AOP代理模式
代理模式 代理模式是一种设计模式,提供了对目标对象的另外的访问方式.即通过代理访问目标对象. 好处:可以再目标对象实现的基础上,增加额外的功能的操作.扩展目标对象的功能,而不改变现有的功能逻辑. 1. ...
- C#设计模式:代理模式(Proxy Pattern)
一,什么是C#设计模式? 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 二,代码如下: using System; using System.Collectio ...
- 有关Spring的ioc理解之代理模式
AOP代理模式可以实现事务控制和业务逻辑代码横切. 使用代理模式,动态代理实现横切. 什么是代理? 接口就是指定要做的事情,要实现的逻辑. 代理类似于房源租房 public interface ZuF ...
- Spring代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- Spring 代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- 设计模式--5.5 代理模式-通用代码及aop
1.通用代码 (1)Subjects package com.design.代理模式.通用代码; public interface Subject { void request(); } (2)Rea ...
- AOP基础—代理模式
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...
随机推荐
- OpenFOAM v2306 安装
参考 https://develop.openfoam.com/Development/openfoam/-/wikis/precompiled/debian curl https://dl.open ...
- 都是全志T113处理器,“-i”和“-S3”有什么区别?
自9个月前,创龙科技"1片含税就79元"的全志T113-i双核ARM Cortex-A7@1.2GHz的工业核心板(SOM-TLT113)推出之后,不少嵌入式软硬件工程师.用户都咨 ...
- Qt--共享内存监听工具
共享内存概述 共享内存的特点: 1)共享内存是进程共享数据的一种最快的方法. 一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容. 2)使用共享内存要注意的是多个进程 ...
- 张高兴的 MicroPython 入门指南:(二)GPIO 的使用
目录 什么是 GPIO 使用方法 使用微动开关点亮板载 LED 硬件需求 电路 代码 参考 什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即&quo ...
- QAnything AI开源的企业级本地知识库问答解决方案,致力于支持任意格式文件或数据库的问答
QAnything AI简介 QAnything ai是一个本地知识库问答系统,旨在支持多种文件格式和数据库,允许离线安装和使用.您可以简单地删除任何格式的任何本地存储文件,并获得准确.快速和可靠的答 ...
- webpack4.15.1 学习笔记(一) — 基本概念
目录 入口(entry) 出口(output) 加载器 Loaders 插件 Plugins 模式 webpack.config.js 配置 终终终终于下定决心,对你下手了,系统的学习一下. webp ...
- [oeasy]python0014_二进制_binary_bin
二进制(binary) 回忆上次内容 上次我们了解了ASCII码表 ASCII 码表就是 American Standard Code for Inf ...
- Pandas库学习笔记(5)---Pandas Panel
Pandas Panel Pandas Panel基本操作 Panel数据3D容器. 术语 Panel data 源自计量经济学,名称来之于pandas − pan(el)-da(ta)-s. 3个轴 ...
- Python Kafka客户端confluent-kafka学习总结
实践环境 Python 3.6.2 confluent-kafka 2.2.0 confluent-kafka简介 Confluent在GitHub上开发和维护的confluent-kafka-pyt ...
- ElementUI 基于vue+sortable.js实现表格行拖拽
基于vue+sortable.js实现表格行拖拽 By:授客 QQ:1033553122 实践环境 sortablejs@1.13.0 vue@2.6.11 element-ui@2.13.2 安装s ...