aop配置文件理解

      <bean id="common" class="com.cn.jgweb.utils.Common"/>
      <bean id="check" class="com.cn.jgweb.utils.TestAop"/>
	 <aop:config>
	    <aop:aspect id="myAop" ref="check"> //ref指向check  
	      <aop:pointcut id="target" expression="within(com.cn.jgweb.utils.*)"/> //表示在com.cn.jgweb.utils.* 在这个包下的所有类所有方法都有aop参与
	      <aop:before method="before" pointcut-ref="target"/>  //指定前置方法
	      <aop:after method="after" pointcut-ref="target"/>   //指定后置方法
	    </aop:aspect>
	  </aop:config>

 
 
  • 任意公共方法的执行:
    execution(public * * (..))
  • 任何一个名字以“set”开始的方法的执行:
    execution(* set* (..))
  • AccountService接口定义的任意方法的执行:
    execution(* com.cn.service.AccountService.*(..))
  • 在service包中定义的任意方法的执行:
    execution(* com.cn.service.*.*(..))
  • 在service包或其子包中定义的任意方法的执行:
    execution(* com.cn.service..*.*(..))
  • 在service包中的任意连接点(在Spring AOP中只是方法执行):(这个包下所有方法都执行)
    within(com.cn.service.*)
  • 在service包或其子包中的任意连接点(在Spring AOP中只是方法执行): (这个包及子包下所有方法都执行)
    within(com.cn.service..*)
  • 实现了 AccountService接口的代理对象的任意连接点 (在Spring AOP中只是方法执行):
    this(com.cn.service.AccountService)
    'this'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得代理对象在通知体内可用。
  • 实现 AccountService接口的目标对象的任意连接点 (在Spring AOP中只是方法执行):
    target(com.cn.service.AccountService)
    'target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得目标对象在通知体内可用。
  • 任何一个只接受一个参数,并且运行时所传入的参数是 Serializable 接口的连接点(在Spring AOP中只是方法执行)
    args(java.io.Serializable)
    'args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得方法参数在通知体内可用。
    请注意在例子中给出的切入点不同于  execution(* *(java.io.Serializable)): args版本只有在动态运行时候传入参数是Serializable时才匹配,而execution版本在方法签名中声明只有一个  Serializable类型的参数时候匹配。
  • 目标对象中有一个  @Transactional 注解的任意连接点 (在Spring AOP中只是方法执行)
    @target(org.springframework.transaction.annotation.Transactional)
    '@target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
  • 任何一个目标对象声明的类型有一个  @Transactional 注解的连接点 (在Spring AOP中只是方法执行):
    @within(org.springframework.transaction.annotation.Transactional)
    '@within'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
  • 任何一个执行的方法有一个  @Transactional 注解的连接点 (在Spring AOP中只是方法执行)
    @annotation(org.springframework.transaction.annotation.Transactional)
    '@annotation'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
  • 任何一个只接受一个参数,并且运行时所传入的参数类型具有 @Classified 注解的连接点(在Spring AOP中只是方法执行)
    @args(com.cn.security.Classified)
    '@args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
  • 任何一个在名为' tradeService'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
    bean(tradeService)
  • 任何一个在名字匹配通配符表达式' *Service'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
    bean(*Service)

我的理解是:  先拦截住这个方法,然后调用切面before方法, 然后在运行 add方法
拦截规则: 
com.bjsxt.service 下的所有子类的 add (..) 有参数方法
JoinPoint joinPoint   String name = joinPoint.getSignature().getName();  name是当前方法的类名,
  Class<? extends Object> class1 = joinPoint.getTarget().getClass();   可以获取类名的class    Object[] args = joinPoint.getArgs(); 获取参数(参数为list)
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
				.getRequest();  //在aop中获取request
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值