单从Advice(通知)实现AOP

如果你在实际开发中没感觉到OOP的一些缺陷,就不要往下看了!

如果你不了解AOP,或类似AOP的思路,请先去了解一下AOP相关的认识。

如果你是概念党,或是经验党,或是从众党,也请不要看了!

我实现的只是一个小功能,是不是AOP我并不清楚,也不主要,标题那样写只是让大家一看就明白本文讲的大概是什么,况且我也想不出写个什么标题。

因为我看了别人谈论的AOP,扯到好多东西,代理啦、emit啦等等天花乱坠的,不过一个也没看懂(I hate complex)!

但有一点对我很有用,就是几种通知类型:

1,目标方法调用前(before)

2,目标方法调用后(after)---目标方法异常也执行

3,目标方法返回后(after return)---目标方法异常不执行

3,目标方法调用前后(around)

4,目标方法抛出异常时(throw)

我感觉稍微整理一下更好理解,所以下方的实现是基于这6种类型的:

1,目标方法调用前(Before)

2,目标方法调用后(After)--目标方法异常是不执行的!

3,目标方法调用后(AfterEnsure) --目标方法异常也执行。

4,目标方法调用前后(Around)--目标方法异常,After是不执行的

5,目标方法调用前后(AroundEnsure)--目标方法异常,After也执行

6,目标方法抛出异常时(Throw)

考虑到多种通知处理,就需要一个统一接口(泛指接口), 而这里抽象类比.net接口更合适:(这个组件只有两个类,这是其中之一)

public abstract class AspectAdvice
{
    public virtual void Before(object target, MethodInfo mi, params object[] args) { }
    public virtual void After(object target, MethodInfo mi, params object[] args) { }
    public virtual void Throw(object target, MethodInfo mi, params object[] args) { }
}

三个方法就够了,这三个方法与目标方法不同的调用逻辑可以满足上面6种通知,下面再分析。

为了好描述,我也以日志记录为例,下面分别是目标类,和日志类(可以叫它切面吗?呵呵)

public class MyClass
    {
        //无返回值
        public void Act()
        {
            Console.WriteLine("MyClass.Act()");
        }
        //有返回值
        public int Fun(string str)
        {
            return str.Length;
        }
        private int m_num=10;
        //用到对象成员m_num,可能发生异常
        public int Divide(int n)
        {
            return m_num / n;
        }
        //静态方法
        public static void SFun(string str)
        {
            Console.WriteLine(str);
        }
    }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索异常
, object
, 方法
, public
, 调用的目标发生了异常
, Advice object [null]
, void
目标
aop advice、spring aop advice、aop advice ref、spring aop实现原理、aop实现原理,以便于您获取更多的相关知识。

时间: 2024-12-12 05:44:51

单从Advice(通知)实现AOP的相关文章

s2sh框架搭建(基于spring aop)

对于spring aop 是如何管理事务的,请看一下:http://bbs.csdn.net/topics/290021423 1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3

Spring中的AOP(二)——AOP基本概念和Spring对AOP的支持

AOP的基本概念     AOP从运行的角度考虑程序的流程,提取业务处理过程的切面.AOP面向的是程序运行中的各个步骤,希望以更好的方式来组合业务逻辑的各个步骤.AOP框架并不与特定的代码耦合,AOP框架能处理程序执行中特定切入点,而不与具体某个类耦合(即在不污染某个类的情况下,处理这个类相关的切点).下面是一些AOP的一些术语:     切面(Aspect):业务流程运行的某个特定步骤,也就是应用运行过程的关注点,关注点通常会横切多个对象,因此常被称为横切关注点     连接点(JoinPoi

使用Spring进行面向切面编程(AOP)---讲解+代码

6.1. 简介 6.2.4.1. 前置通知(Before advice) 一个切面里使用 @Before 注解声明前置通知: import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class BeforeExample {          @Before("com.xyz.myapp.SystemArchitecture.dataAccessOpe

exception-急!!!!!!spring日志管理问题--不进advice

问题描述 急!!!!!!spring日志管理问题--不进advice 这是我applicationCotext.xml中的配置文件 aop:config /aop:aspect /aop:config 这是我的advices类 public class Advisor { static Logger log = Logger.getLogger(Advisor.class); public String information; /** * */ public Advisor() { // TO

Spring Aop实例之xml配置

       上篇博文<3幅图让你了解Spring AOP>中介绍了aop通知类型,AOP的配置方式有2种方式:xml配置和AspectJ注解方式.今天我们就来实践一下xml配置方式.       我采用的jdk代理,所以首先将接口和实现类代码附上 package com.tgb.aop; public interface UserManager { public String findUserById(int userId); } package com.tgb.aop; public cl

【spring源码学习】spring的AOP面向切面编程的实现解析

一:Advice(通知)(1)定义在连接点做什么,为切面增强提供织入接口.在spring aop中主要描述围绕方法调用而注入的切面行为.(2)spring定义了几个时刻织入增强行为的接口  =>org.springframework.aop.BeforeAdvice   org.springframework.aop.MethodBeforeAdvice  =>org.springframework.aop.AfterAdvice   org.springframework.aop.After

一纸通知,网络租车遭遇危机

网络租车乱象丛生,监管部门着手规范市场.北京市交通委运管局日前下发了一份标题为<关于严禁汽车租赁企业为非法营运提供便利的通知>(下称<通知>)的文件,严禁把私家车辆或其他非租赁企业车辆用于汽车租赁经营.业内人士表示,网络租车长期潜伏的政策风险开始爆发,亟需政府有关部门的监管规范,这对从业者而言,既是危机也是挑战.但对消费者而言,监管有利于营造一个安全便捷的租车环境,利于消费者权益的保护. 一纸通知,网络租车遭遇危机 方兴未艾的互联网租车行业突然面临重大转折.北京市交通委运输管理局下

ssh2使用aop后属性注入失败

问题描述 spring配置文件<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org

Spring 一二事(9) - xml 形式的 AOP

AOP在spring中是非常重要的一个 在切面类中,有5种通知类型: aop:before  前置通知 aop:after-returning  后置通知 aop:after  最终通知 aop:after-throwing  异常通知 aop:around  环绕通知 1 <bean id="personDAO" class="com.lee.spring002.aop.xml.PersonDAOImpl"></bean> 2 <be