zoukankan      html  css  js  c++  java
  • 1.Spring AOP应用

      首先咱们来了解一下具体的业务场景(这是个真实的项目的业务场景):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增、修改、删除功能,当我们在对每个主档做这些操作时需要对其记录日志,注意系统中还有很多其他功能模块,但只对主档记录日志,在这里我通过自定义了一个主档注解,不然的话还真不好区分是否是主档。这时候就要使用到Spring的AOP功能了,代码如下(这里只写Spring AOP配置和AOP实现类,具体的业务bean就是serviceImpl里面的add、update、delete):

      Spring AOP配置:

      AOP实现类的bean

      <bean id="commitLogServiceAop" class="com.yueya.oms.lmd.CommitLog.impl.CommitLogServiceAop"/>

      AOP切点配置

      <aop:config>
    <!--主档新增异动切入点配置-->
    <aop:pointcut id="masterFileAddPointcut"
    expression="execution(* com.yueya..impl.*ServiceImpl.add*(..))"/>
    <!--主档修改异动切入点配置-->
    <aop:pointcut id="masterFileUpdatePointcut"
    expression="execution(* com.yueya..impl.*ServiceImpl.update*(..))"/>
    <!--主档删除异动切入点配置-->
    <aop:pointcut id="masterFileDeletePointcut"
    expression="execution(* com.yueya..impl.*ServiceImpl.delete*(..))"/>
    <!--配置一个主档异动的切面Bean优先级为0,使用环绕通知-->
    <aop:aspect id="commitLogAspect" ref="commitLogServiceAop" order="0">
    <aop:around pointcut-ref="masterFileAddPointcut" method="execute"/>
    <aop:around pointcut-ref="masterFileUpdatePointcut" method="execute"/>
    <aop:around pointcut-ref="masterFileDeletePointcut" method="execute"/>
    </aop:aspect>
    </aop:config>
    AOP实现类
    public class CommitLogServiceAop {
    @Autowired
    protected CommitLogService commitLogService;

    public Object execute(ProceedingJoinPoint jp) throws Throwable {
    //通过主档注解@MasterFile判断当前实现类是否是主档实现类
    Boolean annotation = jp.getTarget().getClass().isAnnotationPresent(MasterFile.class);
    Object result;
    String target = jp.getSignature().getName();//目标方法名称
    Object[] args = jp.getArgs();//目标方法参数
    result = jp.proceed(args);//执行目标方法并得到方法的返回值
    if (annotation) {
    RecordContext.getInstance().take(args[0], target, result);//记录日志的业务逻辑
    }
    return result;//将返回值返回给容器
    }
    }
     
    http://www.cnblogs.com/haohaoge/
  • 相关阅读:
    Java调用wcf
    登录重构小记
    从零打造一个Web地图引擎
    Vue动态组件的实践与原理探究
    揭开Vue异步组件的神秘面纱
    使用vue实现排序算法演示动画
    C#转义字符
    asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)
    页面关闭事件onbeforeunload 记录
    执行一段sql
  • 原文地址:https://www.cnblogs.com/haohaoge/p/6773309.html
Copyright © 2011-2022 走看看