• 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/
  • 相关阅读:
    Linux Centos7安装mongodb并设置开机启动
    解决Centos7下载慢的问题
    用Python处理HTML转义字符的5种方式
    java 利用poi对Excel解析读取和写入,解析resources下的.json文件
    feign.FeignException: status 404 reading DeptClientService#findAll()
    java中进程与线程的区别
    java中sigar获取信息
    Cesium 4490 解决方案
    Windows Server自动化部署Sysprep
    关于SET ANSI_PADDING的作用
  • 原文地址:https://www.cnblogs.com/haohaoge/p/6773309.html
Copyright © 2020-2023  润新知