若依注解学习(一)@Log

@Log

        涉及到:
            Log,LogAspect,SecurityUtils,SysUser,SysOperLog,BusinessStatus,StringUtils,ServletUtils
            AsyncManager,AsyncFactory,AddressUtils,IpUtils,RuoYiConfig,HttpUtils,JSONObject,
            ISysOperLogService

            security当前用户,获取ip,获取请求信息,注解参数解析,异步处理,任务工厂,统一异常处理

        位置:
            在我们使用ruoyi的代码生成器的时候,在controller的每个方法出现


        作用:
            写在方法上,通过aop切面编程,在方法执行前、方法执行完、方法异常的时候做处理
            包括对用户的每一次操作进行数据库存储,记录用户操作

        Log定义位置:
            common中,出现在公共模块,若出现在其他模块,极其容易出现模块相互依赖的问

            题,所以ruoyi框架为什么要定义在这


        aop处理:
            core中,core是ruoyi框架的核心代码,在aop中对操作进行处理,其中,会调用安全框架来

            获取当前用户存到SysUser中
            注意这个对象也写在common,也是避免模块依赖问题

            其中的shiroUtils我改成了SecurityUtils,具体逻辑就是从security安全上下文取出当前用

            户,若出现异常则捕获,抛出
            CustomException异常,这个异常继承了RuntimeException,会被若以的全局异常处理

         (@RestControllerAdvice)
            
            接着设置数据库日志对象,保存数据库:
                SysOperLog:
                    设置操作为成功
                    ip:可以直接从security安全上下文获取
                    url:RequestContextHolder获取    getRequestAttributes 再获取    getRequest  再获取      getRequestURI
                    设置用户信息
                    抛出异常则把操作设置为失败    
                    设置方法名,请求方式,根据Log上的参数设置信息
                    异步处理器执行任务保存数据库:
                        调用service,mapper保存
                    
            注意:若以框架有专门的异步处理器AsyncManager
                    通过AsyncManager.me().execute(AsyncFactory.recordOper(operLog));异步处理

            其中AsyncManager中:
                    异步线程池通过springUtils获取: * spring工具类 方便在非spring管理环境中获取bean,  SpringUtils.getBean("scheduledExecutorService");
                    单例
                    execute:参数为一个Task,该Task通过任务工厂AsyncFactory生产你要执行的任务·
                    

你可能感兴趣的:(学习,ruoyi)