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设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...
随机推荐
- ClickHouse的物化视图及MySQL表引擎
MySQL表引擎可以与MySQL数据库中的数据表简历映射,并通过SQL向其发起远程查询. MySQL表引擎可以与物化视图结合,来同步更新MySQL数据库中的数据. 语法: CREATE TABLE [ ...
- Linux服务器从头配置
安装配置jdk 下载 jdk jdk-8u171-linux-x64.tar.gz 将该压缩包放到/usr/local/jdk目录下然后解压(jdk目录需要自己手动创建) tar zxvf jdk-8 ...
- Java 面向对象编程之继承的super关键词
java 继承里面的super关键词 super关键词 一个引用变量,用于引用父类对象 父类和子类都具有相同的命名属性,要调用父类中的属性时使用 super也是父类的构造函数,格式super(参数) ...
- C++ Constructor And Destructor
if you have problems with constructors and destructors, you can insert such print statements in cons ...
- 【nvm、node、npm、nrm】安装配置教程(windows版)
一.nvm 的安装与配置 1.nvm 下载与安装 nvm官方下载地址 (我这里使用当前最新版本 1.1.12) 2.验证 nvm 是否安装成功 # 查看 nvm 版本 nvm -v # 显示远程可安装 ...
- 适用于PyTorch 2.0.0的Ubuntu 22.04上CUDA v11.8和cuDNN 8.7安装指南
将下面内容保存为install.bash,直接用shell执行一把梭解决 #!/bin/bash ### steps #### # verify the system has a cuda-capab ...
- CF709B 题解
洛谷链接&CF 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定 \(N\) 个点,在一条数轴上,位置为 \(x_1,-,x_n\),你的位置为 \(p\) ...
- Midnight Commander (MC)
Midnight Commander GNU Midnight Commander 是一个可视化文件管理器,根据 GNU 通用公共许可证获得许可,因此有资格成为自由软件.它是一个功能丰富的全屏文本模式 ...
- .NET 中高效 Excel 解决方案 MiniExcel
前言 MiniExcel 是一个用于 .NET 平台的轻量级.高性能的库,专注于提供简单易用的 API 来处理 Excel 文件.以下是 MiniExcel 的特点总结: 轻量级与高效:MiniExc ...
- 浅谈 I/O 与 I/O 多路复用
1.基础知识 网络编程里常听到阻塞IO.非阻塞IO.同步IO.异步IO等概念,总听别人聊不如自己下来钻研一下.不过,搞清楚这些概念之前,还得先回顾一些基础的概念. 下面说的都是Linux环境下,跟Wi ...