• 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/
  • 相关阅读:
    Mysql:Error Code 1235,This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
    java 发送带Basic Auth认证的http post请求
    spring-boot 加载本地静态资源文件路径配置
    mac上使用终端生成RSA公钥和密钥
    mysql 查看正在运行的进程
    mysql中You can’t specify target table for update in FROM clause错误解决方法
    Redis的三种启动方式
    Redis在Mac下的安装与使用方法
    Linux vi中查找字符内容的方法
    spring boot 之@JsonView 简单介绍
  • 原文地址:https://www.cnblogs.com/haohaoge/p/6773309.html
Copyright © 2020-2023  润新知