zoukankan      html  css  js  c++  java
  • AOP (切点表达式讲解)

    Spring EL表达式::

    1、execution 表达式

      语法格式: execution(返回类型.包名.类名.方法名(参数表))

      exection(*.com.xxx.AService.*(..))

      com.xxx.AService 类型中的任意方法,任意类型返回结果,参数表不限定,都增加切面

      应用:最常用。也是相对最通用。根据方法执行的标准,定义切点 如 事务  日志

    <aop:config>
      <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(..))" id="mypoint"/>
    </aop:config>

    2、target 表达式

      以目标对象作为切点的表达式定义方式 (用于某一个接口or某一类接口)

      语法:target(包名.接口名)

      如:target(com.xx.IA)  所有实现了IA接口的实现类,作为代理的目标对象,会自动增加通知的织入,是实现切面

      应用:为某一个具体的接口实现提供的配置。如 登录的时候需要执行的附属逻辑是比较多的。在不同的业务流程中,附属逻辑也不同。如,电商中,可能在登录的时候需要去执行购物车合并

    <aop:config>
      <aop:pointcut expression="target(com.bjsxt.aop.TestService)" id="mypoint"/>
    </aop:config>

    3、this 表达式

      实现某接口的任意代理对象都作为切点

      语法:this(包名.接口名)

      如:this(com.xxx.IA)  代理对象 Proxy如果实现了IA接口,则作为连接点

      应用:针对某个具体的代理提供的配置。比target切点粒度细致。因为目标对象可以多实现。代理对象可以针对目标对象实现的多个接口的某一个接口,提供特定的切点。如,银行中的登录,银行中的账户种类非常多,且有交叉。如借记卡,贷记卡,借记还贷卡。。。。可以针对还贷接口提供一个切点,做还贷信息 的记录等。

    <aop:config>
      <aop:pointcut expression="this(com.bjsxt.aop.TestService)" id="mypoint"/>
    </aop:config>

    4、 within 表达式

      以包作为目标,定义切点

      语法: within(包名.*) 代表在包中的任意接口或类型都作为切点

      应用:针对某一个包提供的切点,粒度比target粗糙。如:某包中的所有接口都需要执行某附属逻辑。如 电商平台中的下订单。下订单服务中可能需要特定的逻辑(时间戳校验,库存检查等),这些逻辑,是其他业务线中不需要提供切面的

    <aop:config>
      <aop:pointcut expression="within (com.bjsxt.aop.*)" id="mypoint"/>
    </aop:config>

    5、args表达式

      以参数标准作为目标,定义切点

      语法: args(类型,类型.....) 代表方法的参数表符合要求的时候,作为切点,参数表是有顺序的

      应用:主要应用在参数校验中。如:登录的时候必须传递两个字符串参数(登录名和密码)。可以使用args来限定。配合这execution实现。如:execution(.*.xxx.*.login(..)) args(String,String)。是使用频率最低的表达式

    <aop:config>
      <aop:pointcut expression="args (java.lang.String)" id="mypoint"/>
    </aop:config>
  • 相关阅读:
    2017.8.15
    2017.8.14
    2017.8.12
    2017.8.11
    2017.8.10
    IE9下透明度设置无效
    IE7不支持Z-index问题
    IE9下支持jQuery
    IE9下支持css3的方法
    oninput、onpropertychange和onchange
  • 原文地址:https://www.cnblogs.com/axu521/p/10180045.html
Copyright © 2011-2022 走看看