在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能。非常便捷的实现了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. PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

    <?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...

  2. JavaScript Date对象介绍

    原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...

  3. js模块开发

    js模块开发(一) 现在嵌入页面里面的javascript代码越来越复杂,于是可能依赖也越来越严重,使用别人开发的js也越来越多,于是在理想情况下,我们只需要实现核心的业务逻辑,其他都可以加载别人已经 ...

  4. Android 2.3 版本中链接边框问题解决

    在做移动互联网开发的过程中,同样需要考虑到移动终端(如手机.平板)的不同版本浏览器兼容问题,在Android 2.3 版本的默认浏览器中有一个bug-会自动给所有链接文本在点击操作过程中加黄色或绿色边 ...

  5. JSP+Java+properties+FileInputStream文件读写,JSP页面读取properties文件

    String realPath = request.getRealPath("WEB-INF/classes/com/properties/devicetype.properties&quo ...

  6. SQL点滴11—重置win7登录密码影响SQL登录

    原文:SQL点滴11-重置win7登录密码影响SQL登录 2011-04-20  修改机器登录密码后不能登录SQL Server 今天发现一个很有趣的现象.公司的电脑每两个月就会提示重置登录密码,今天 ...

  7. C#中调用Outlook API 发起会议

    原文:C#中调用Outlook API 发起会议 在我上一篇博文中曾提到了 SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件 但是,里面的方法只能用于发送普通电子邮件.如果要发起会 ...

  8. 1.1 什么是LinQ

    如今,软件应用环境越来越多样化,软件需要处理的数据量也日渐庞大,数据之间的关系日渐复杂.从而带动了存储技术的不断发展,越来越多的数据存储格式被应用到各种软件中. 通常,针对数据的查询是用简单的字符串文 ...

  9. Spring IOC之依赖

    一个标准的企业级应用不只有一个对象组成.即使是最简单的引用也会有个相互作用的对象以使最终呈现 在用户面前的是个连贯一致的引用. 1依赖注入 依赖注入(DI)是一个对象定义他们依赖的过程,也就是说他们一 ...

  10. 设置符合条件的DataGridView的行的颜色的两种方法

    Private Sub dgvInfo_RowPrePaint(sender As Object, e As DataGridViewRowPrePaintEventArgs) Handles dgv ...