在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能。非常便捷的实现了AOP,但当我们需要对多个切入点配置通知的时候就需要声明多个代理工厂,这样导致配置文件内容过多,配置过程也很繁琐。spring.net提供了很多便捷的方式来改善配置的过程,我们往下看,

  配置实现AOP需要三个步骤,

  1、申明对象

  2、申明通知

  3、申明切入点

  申明对象很简单,一个object,设置id和type即可。

 申明通知

  申明通知有很多方法,先来看看几种自动代理的方式,

  1、ObjectNameAutoProxyCreator

 <object id="DataService" type="AOPDmo.DataService, AOPDmo"/>   <object id="LogAdvice" type="AOPDmo.LogAdvice, AOPDmo"/>  

  <object id="advisor" type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">
    <property name="ObjectNames">
      <list>
        <value>*Service</value>
      </list>
    </property>
    <property name="InterceptorNames">
      <list>
        <value>LogAdvice</value>
      </list>
    </property>
  </object>

  自动代理包括了通知和切入点的设置,和ProxyFactoryObject一样,ObjectNameAutoProxyCreator有一个InterceptorNames属性用来告诉代理工厂需要的通知。

  不一样的是,ObjectNameAutoProxyCreator用ObjectNames属性来告诉代理工厂切入点是一个正则表达式,这里匹配的是所有以Service结尾的object对象。

  2、DefaultAdvisorAutoProxyCreator  

  <object id="ProxyCreator" type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop"/>

    该类会在当前容器中自动应用满足条件的Advisor,而不用在自动代理Advisor的对象定义中包含特定的对象名。他和RegularExpressionMethodPointcutAdvisor配合实现AOP,后面会重新提到

  3、AbstractAdvisorAutoProxyCreator

    这是DefaultAdvisorAutoProxyCreator的父类。如果在某些情况下框架提供的DefaultAdvisorAutoProxyCreator不能满足你的需要,你可以通过继承这个类来创建你自己的自动代理创建器。

 申明切入点

  1、正则表达式切入点

    a.SdkRegularExpressionMethodPointcut

<object id="advisor" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
    <property name="pattern" value="AOPDmo.*.*"/>
  </object>

  <aop:config>
    <aop:advisor pointcut-ref="advisor" advice-ref="LogAdvice"></aop:advisor>
  </aop:config>

  SdkRegularExpressionMethodPointcut利用正则表达式将所有和property匹配的对象都作为切入点,解释下这里的正则(命名空间).(类).(方法),例子的意思是AOPDmo命名空间下任何类的任何方法都作为切入点。这里的*号经本人测试AOPDmo*.是无效的,只要以*号结尾那么就是"所有",并不是以AOPDmo开头的意思。而*AOPDmo则是以AOPDmo结尾的意思。

    b.RegularExpressionMethodPointcutAdvisor

<object id="ProxyCreator" type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop"/>

  <object id="advisor"
    type="Spring.Aop.Support.RegularExpressionMethodPointcutAdvisor, Spring.Aop">
    <property name="advice">
      <ref local="LogAdvice"/>
    </property>
    <property name="patterns">
      <list>
        <value>.*.SaveData</value>
      </list>
    </property>
  </object>

  如果只需要定义一个模式字符串,可以使用Pattern属性,不必用Patterns属性定义模式列表。RegularExpressionMethodPointcutAdvisor来申明切入点和通知,由DefaultAdvisorAutoProxyCreator来创建。

  这里列举了简单常用的配置方法,还有很多更复杂,但是更灵活的东西需要去了解,学习。

spring.net AOP配置基础的更多相关文章

  1. Spring的AOP配置

    Spring的AOP配置 1.先写一个普通类: package com.spring.aop; public class Common {  public void execute(String us ...

  2. 学习 Spring (十三) AOP 配置

    Spring入门篇 学习笔记 Spring 所有的切面和通知器都必须放在一个 内(可以配置包含多个 元素),每一个 可以包含 pointcut, advisor 和 aspect 元素(它们必须按照这 ...

  3. 0047 Spring的AOP入门基础--切面组件--通知--切入点

    AOP的全称是Aspect Oriented Programming,面向切面编程. 切面是什么呢,就是一个Java类.之所以叫切面,就是说在调用其他一些类的方法的某个时候(之前,之后,抛异常等),调 ...

  4. Spring之AOP配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  5. 使用Spring实现AOP(XML+注解)

    一.Spring对AOP的支持 AOP并不是Spring框架特有的,Spring只是支持AOP编程的框架之一,每一个框架对AOP的支持各有特点,有些AOP能够对方法的参数进行拦截,有些AOP对方法进行 ...

  6. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  7. Spring的aop思想

    1.AOP思想 (1)在解决中文乱码的应用: 一般情况下如果在Servlet中要解决中文乱码问题需要在每一个Servlet中书写解决乱码的代码,但是,在运用了过滤器之后,就不再需要每一个Servlet ...

  8. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  9. spring之aop概念和配置

    面向切面的一些概念: 简单说: 连接点就一些方法,在这些方法基础上需要额外的一些业务需求处理. 切入点就是方法所代表的功能点组合起来的功能需求. 通知就是那些额外的操作. 织入就是使用代理实现整个切入 ...

随机推荐

  1. HBase文件格式演变之路

    Apache HBase是Hadoop的分布式开源的存储管理工具,很适合随机实时的io操作. 我们知道,Hadoop的Sequence File是一个顺序读写,批量处理的系统.可是为什么HBase能做 ...

  2. Hibernate制图(两)——许多-于─关系映射

    上篇学习了Hibernate的基本映射,也就是单表映射,非常easy就能理解,可是对于关系数据库来说,表之间存在关系是比不可少的.关系数据库中存在的关系是通过主外键建立起来的.反应到Hibernate ...

  3. c# 文件同步服务器,iis 集群 ,代码同步(二)

    打算自己做一个 集群 代码同步软件. 基于Socket 和 FileSystemWatcher .

  4. UIAppDelegate介绍

    #import "GLAppDelegate.h" @implementation GLAppDelegate // 当应用程序启动完毕的时候就会调用(系统自动调用) - (BOO ...

  5. jQuery整理您的笔记----jQuery开始

    Jquery它是一种高速.简明的JavaScript相框,jQuery设计目标:Write Less,Do More(写更少的代码,做很多其他的事情). 一.Jquery框架优势: 1.轻量级 jQu ...

  6. PHP版本的区别

    原文:PHP版本的区别 以为这个已经写过了,发现没有,赶紧补充下. PHP的版本,自从进入5以后,发布新版本速度明显提升很多,从PHP5.2开始,5.3 .5.4 .5.5,就快要6.0了. 注:ec ...

  7. Struts2和Struts1的主要区别(完整版)

    Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Act ...

  8. Libgdx Box2D现实---这缓释微丸(两:Box2D介绍)

     Box2D官方网站 : http://box2d.org/ Box2D v2.1.0用户手冊翻译 : http://blog.csdn.net/complex_ok/article/catego ...

  9. js面向对象学习总结

    1.函数作为参数进行传递 function a(str,fun){ console.log(fun(str)) }; function up(str){ return str.toUpperCase( ...

  10. SSIS中Sql Task 获取系统变量

    原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @var ...