.net动态代理-EMIT,AOP实现

动态代理实现原理:

  通过动态基础目标类,重写目标虚方法,.net中实现手段-il

  Emit.Proxy项目源码,https://github.com/1448376744/Emit.Proxy

  以下是基于Emit.Proxy实现的Demo

  class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var generator = new ProxyGenerator();
            //多实例拦截器
            var service = generator.CreateInstanse<Service>(new TransactionInterceptor());
            service.DelUser();
        }
    }

    public class Service
    {
        public virtual void UpdateUser()
        {
            Console.WriteLine("用户已修改");
        }
        public virtual void DelUser()
        {
            Console.WriteLine("用户已删除");
        }
    }
    public class TransactionInterceptor : IInterceptor
    {
        private DbConnection Connection { get; set; }
        public DbTransaction Transaction { get; set; }
        public void Intercept(IInvocation invocation)
        {
            try
            {
                if (Connection == null)
                {
                    Connection = new MySql.Data.MySqlClient.MySqlConnection("server=127.0.0.1;user id=root;password=1024;database=test;pooling=true;");
                    Connection.Open();
                    Console.WriteLine("事务已开启");
                    Transaction = Connection.BeginTransaction();
                }
                //执行目标方法
                invocation.Proceed();
                Transaction?.Commit();
                Console.WriteLine("事务提交了...");
            }
            catch (Exception e)
            {
                Console.WriteLine("异常:{0}",e.Message);
                //回滚事务
                Transaction?.Rollback();
                Console.WriteLine("事务回滚了");
                //记录日志:NLog
                Console.WriteLine();
            }
            finally
            {
                Connection?.Close();
            }
        }
    }

原文地址:https://www.cnblogs.com/chaeyeon/p/10986471.html

时间: 2024-11-09 04:00:30

.net动态代理-EMIT,AOP实现的相关文章

动态代理实现aop

动态代理实现aop: 1.确定代理对象如接口 2.编写动态代理类,构造器初始化并传入代理对象 3.获得代理对象方法 1).指定代理对象由哪个加载器负责加载 2).指定代理类型 3)当调用代理对象调用其中方法时,该执行哪个方法, 在InvocationHandler h =new InvocationHandler()中 当调用proxy属性或相关方法时,如proxy.toString()会无限循坏,导致内存溢出. 4).3)输出顺序为日志,执行方法.日志,个人感觉用反射的地方蛮多的,没有spri

Java使用动态代理实现AOP

参考资料: http://www.importnew.com/15420.htmlhttp://www.cnblogs.com/techyc/p/3455950.html Spring是借助了动态代理(JDK dynamic proxy)和CGlib两种技术实现AOP的,本文将学习前人的例子使用动态代理模拟AOP的特性. 1. 环境 Java: jdk1.8.0_144 2. 学习动态代理Proxy.newProxyInstance()方法 它的三个参数如下 参数名 类型 说明 loader C

.Net 框架实现AOP(动态代理实现AOP,本文为翻译)

在上一节,我们将静态实现AOP,但是对于一个大型项目,要想为每个类,每个方法都去实现AOP ,进行日志记录和权限验证似乎是不可能的. 即使可能对于成百上千个类维护,也是很难维护.所以今天的主题就是如标题所述. (Real Proxy)真正代理和(Dynamic Proxy)动态代理 Real Proxy 类是个抽象类,定义在 System.Runtime.Remoting.Proxies,定义了代理的一些公共的基本的功能方法. Dynamic Proxy 类必须继承Real Proxy,通过重写

Java动态代理--&gt;Spring AOP

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性

细说Spring——AOP详解(动态代理实现AOP)

前言 嗯,我应该是有一段实现没有写过博客了,在写完了细说Spring——AOP详解(AOP概览)之后,我发现我不知道该怎么写AOP这一部分,所以就把写博客这件事给放下了,但是这件事情又不想就这么放弃,所以今天我仔细思考了一下,决定还是要克服困难,我仔细的想了一下怎么讲解AOP实现这一部分,然后我决定由浅入深的讲解动态代理,然后用动态代理实现一个简单的AOP,感觉这样能够让人对AOP的原理有一个比较深刻的认识,希望能帮到大家.而且最近学习又组建了ACM比赛的队伍,虽然已经要大三了,按理来说应该一心

【转载】Java JDK 动态代理(AOP)使用及实现原理分析

转自:http://blog.csdn.net/jiankunking/article/details/52143504 版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有 一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式UML图: 简单结构示意图: 为了保持

动态代理与AOP

1. 代理的分类: 静态代理:每个代理类只能为一个接口服务 动态代理:可以通过一个代理类完成全部的代理功能(由JVM生成实现一系列接口的代理类,即:生成实现接口的类的代理) 2. 动态代理: 在Java中要想实现动态代理机制,需要 java.lang.reflect.InvocationHandler 接口和 java.lang.reflect.Proxy 类的支持 java.lang.reflect.InvocationHandler 接口的定义如下: public interface Inv

动态代理3--Spring AOP分析

Spring AOP的基本实现方式 ?Spring AOP,一种模块化机制,能够动态的对切点添加行为,而不破坏原有的代码结构. 这是一个非常好地动态代理的应用方式.Spring AOP实现依赖于JDK的动态代理库和CGLIB字节码库技术两种来分别实现. ?在Spring AOP中,JdkDynamicAopProxy实现基于JDK动态代理生成代理对象,CglibAopProxy来实现基于CGLIB的动态代理对象生成.并通过DefaultAopProxyFactory进行调用.此处採用策略模式.针

Java动态代理实现AOP

作者:兄弟连 目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等.AOP似乎一时之间成了潮流.Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP.本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧.这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP. 为了