在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能。非常便捷的实现了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. MAC使用小技巧(一)

    [ Mac OS X 终端命令开启功能 ] 1.Lion下显示资源库方法一:显示在“终端”中输入下面的命令:chflags nohidden ~/Library/ 隐藏在“终端”中输入下面的命令:ch ...

  2. GitBook配置

    GitBook 是一个通过 Git 和 Markdown 来撰写书籍的工具.生成格式有:JSON.ePub.PDF.Website ! ================================ ...

  3. JS工具库之Lodash

    破狼 JavaScript工具库之Lodash 2015-04-11 16:08 by 破狼, 235 阅读, 2 评论, 收藏, 编辑 你还在为JavaScript中的数据转换.匹配.查找等烦恼吗? ...

  4. 【百度地图API】圣诞节里不会迷路的麋鹿——驾车导航

    原文:[百度地图API]圣诞节里不会迷路的麋鹿--驾车导航 任务描述: 可能大家还不知道,圣诞老人是爱迷路的老爷爷! 今年圣诞节又要到了,圣诞老人又要出来送礼物了.可是,他灰常的迷路呢! 还好,他有一 ...

  5. Model Validation in Asp.net MVC

    原文:Model Validation in Asp.net MVC 本文用于记录Pro ASP.NET MVC 3 Framework中阐述的数据验证的方式. 先说服务器端的吧.最简单的一种方式自然 ...

  6. Java实现缓存(类似于Redis)

    Java实现缓存,类似于Redis的实现,可以缓存对象到内存中,提高访问效率.代码如下: import java.util.ArrayList; import java.util.HashMap; i ...

  7. JDK动态代理机制

    JDK Proxy OverView jdk的动态代理是基于接口的.必须实现了某一个或多个随意接口才干够被代理.并且仅仅有这些接口中的方法会被代理. 看了一下jdk带的动态代理api,发现没有样例实在 ...

  8. SALT 加密

    大家都知道,MD5加密是不可逆.但事实上,我们通常值的MD5算法.黑客的眼下破解率相对较高.也有非常多站点上干脆就提供批量解密MD5的服务,当然是收费的.http://www.xmd5.org.这里提 ...

  9. 快速构建Windows 8风格应用32-构建辅助磁贴

    原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...

  10. OCP-1Z0-051-题目解析-第5题

    5. Which SQL statements would display the value 1890.55 as $1,890.55? (Choose three .) A. SELECT TO_ ...