Spring AOP 20170503

Spring AOP中pointcut expression表达式解析

   声明一个切入点

   <bean id="userService" class="cn.sxt.service.impl.UserServiceImpl"/>
    <bean id="log" class="cn.sxt.log.Log"/>
    <bean id="afterLog" class="cn.sxt.log.AfterLog"/>
    <aop:config>
     <aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointcut"/>
     <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
     <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
    </aop:config>

Pointcut 是指那些方法需要被执行AOP ,是由Pointcut Expression来描述的


切面(Aspect):一个关注点的模块化

通知(Advice):在切面的某个特定的连接点上执行的动作

织入(Weaving):把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象

前置通知(Before Advice)

后置通知(After Advice)

异常通知(After Throw Advice)

最终通知(After (finally) Advice)

环绕通知(Around Advice)



 <aop:config>
     <aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointCut"/>
     <aop:advisor advice-ref="log" pointcut-ref="pointCut"/>
    </aop:config>


execution后面的*表示所有返回值  impl后面的第一个*表示这个包下面的所有类,第二个*表示类里面所有的方法,(..)表示方法包括参数和无参的



Spring AOP就是将公共的业务(如日志,安全等)和领域业务结合,当执行领域业务时,将会把公共业务加进来。实现公共业务的重复利用。领域业务更纯粹,程序员专注于领域业务。其本质还是动态代理。


第二种实现方式AOP ---自定义实现AOP


 <bean id="userService" class="cn.sxt.service.impl.UserServiceImpl"/>
 <bean id="log" class="cn.sxt.log.Log"/>
 <aop:config>
  <aop:aspect ref="log">
   <aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointcut"/>
   <aop:before method="before" pointcut-ref="pointcut"/>
   <aop:after method="after" pointcut-ref="pointcut"/>
  </aop:aspect>
   </aop:config>


第三种实现方式---通过注解实现


<bean id="userService" class="cn.sxt.service.impl.UserServiceImpl"/>
 <bean id="log" class="cn.sxt.log.Log"/>
 
 <aop:aspectj-autoproxy/>


@Aspect
public class Log {
 @Before("execution(* cn.sxt.service.impl.*.*(..))")
 public void before(){
  System.out.println("-----方法执行前-----");
 }
 @After("execution(* cn.sxt.service.impl.*.*(..))")
 public void after(){
  System.out.println("-----方法执行后-----");
 }
 @Around("execution(* cn.sxt.service.impl.*.*(..))")
 public Object aroud(ProceedingJoinPoint jp) throws Throwable{
  System.out.println("环绕前");
  System.out.println("签名:"+jp.getSignature());
  //执行目标方法
   Object result = jp.proceed();
  System.out.println("环绕后");
  return result;
 }
}


例如:支付业务---接入第三方接口---安全检测---进行身份验证---资金验证---支付











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值