范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot中使用SpringAop实现日志记录功能

  一、创建日志注解
  1、日志类型枚举类 import lombok.Getter;  /**  * 日志类型枚举类  */ @Getter public enum LogType {     /**      * 登录      */     login("LoginLog");      /**      * 实现类名称      */     private final String implClassName;      LogType(String implClassName) {         this.implClassName = implClassName;     } }
  2、自定义日志注解 import java.lang.annotation.*; import com.baige.enums.LogType;  /**  * 自定义日志注解  *  * 注解说明:  * @Documented:文档注解  * @Retention(RetentionPolicy.RUNTIME):生命周期注解,注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在  * @Target({ ElementType.PARAMETER, ElementType.METHOD }):@Target说明了Annotation所修饰的对象范围,ElementType.TYPE:接口、类、枚举、注解,ElementType.METHOD:方法  */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.PARAMETER, ElementType.METHOD }) public @interface Log {     /**      * 登录类型      */     LogType logType(); }
  二、利用AOP实现日志切面统一处理
  1、日志实现类创建工厂 import com.baige.enums.LogType; import com.baige.util.SpringContextHolder; import org.springframework.context.ApplicationContext;  /**  * 日志实现类创建工厂  */ public class LogFactory {      public static ApplicationContext context;      public static IUserLog getInstance(LogType logType) {         return (IUserLog) SpringContextHolder.getBean(logType.getImplClassName());     } }
  2、切面类 import lombok.extern.slf4j.Slf4j; import com.baige.aop.log.IUserLog; import com.baige.aop.annotation.Log; import com.baige.aop.log.LogFactory;  import org.aspectj.lang.annotation.*; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component;  @Slf4j @Aspect @Component public class LogAspect {     /**      * 定义切入点,切入点为com.baige.controller.AopController中的所有函数      * 通过@Pointcut注解声明频繁使用的切点表达式      */     @Pointcut("execution(public * com.baige.controller.UserController.*(..)))")     public void pointcut() {     }      @Around("pointcut()")     public void doAround(ProceedingJoinPoint pjp) {         try {             MethodSignature methodSignature = (MethodSignature) pjp.getSignature();             Log log = methodSignature.getMethod().getAnnotation(Log.class);              IUserLog userLog = LogFactory.getInstance(log.logType());             userLog.addLog(pjp, log);          } catch (Throwable throwable) {             log.info("日志记录异常,不影响正常业务", throwable);         }     } }
  三、创建日志实现类
  1、添加日志接口 import com.baige.aop.annotation.Log; import org.aspectj.lang.ProceedingJoinPoint;  import java.net.UnknownHostException;  public interface IUserLog {     /**      * 添加日志      */     int addLog(ProceedingJoinPoint pjp, Log log) throws UnknownHostException; }
  2、添加日志接口实现类 import java.util.Date; import java.net.InetAddress; import java.net.UnknownHostException;  import lombok.AllArgsConstructor; import org.aspectj.lang.ProceedingJoinPoint; import org.springframework.stereotype.Component;  import com.baige.domain.User; import com.baige.domain.UserLog; import com.baige.aop.log.IUserLog; import com.baige.mapper.UserMapper; import com.baige.aop.annotation.Log; import com.baige.mapper.UserLogMapper;  @AllArgsConstructor @Component("LoginLog") public class LoginLog implements IUserLog {      private final UserMapper userMapper;     private final UserLogMapper userLogMapper;      @Override     public int addLog(ProceedingJoinPoint pjp, Log log) throws UnknownHostException {         UserLog userLog = new UserLog();         Object[] params = pjp.getArgs();          if (params.length > 0) {             User param = (User) params[0];             User user = userMapper.getOne(param.getLoginName(), param.getLoginPassword());             if (user != null) {                 userLog.setUserId(user.getId());                 userLog.setContent("获取用户信息成功");             } else {                 userLog.setContent("未获取到用户信息");             }         }          userLog.setIpAddress(InetAddress.getLocalHost().getHostAddress());         userLog.setCreateTime(new Date());          return userLogMapper.insert(userLog);     } }
  四、controller package com.baige.controller;  import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*;  import com.baige.domain.User; import com.baige.enums.LogType; import com.baige.aop.annotation.Log; import com.baige.service.UserService;  @RestController @AllArgsConstructor @RequestMapping("/user") public class UserController {      private final UserService userService;      @PostMapping("/login")     @Log(logType = LogType.login)     public String login(@RequestBody User params) {         User user = userService.login(params.getLoginName(), params.getLoginPassword());         return user != null ? "登录成功" : "登录失败";     } }路漫漫其修远兮,吾将上下而求索
  译文:在追寻真理方面,前方的道路还很漫长,但我将百折不挠,不遗余力地去追求和探索。
  如果您有什么好的想法与方法,欢迎在评论区留言,我们一起讨论~

头腾撕逼大战,为什么大多数媒体人都亲腾讯?近来头条和腾讯的撕逼大战一直没有停过,先是朋友圈高层互怼,接着是各自利用各种的媒体资源互黑,抖音被腾讯屏蔽事情,抖音提示腾讯屏蔽自己,再到头条今日推送的多少道文件才能管住网游对少年盘点捷德奥特曼中的贝利亚融合兽贝利亚融合兽是伏井出矽(斯特鲁姆星人,如果贝利亚不给力量就不能进行融合升华)或贝利亚奥特曼使用贝利亚升华器(贝利亚升华器只有一个)融合升华两个怪兽胶囊和贝利亚奥特曼融合而成。斯卡鲁滴滴搞事情?公然向多地停车场内车辆贴罚单对广大车主来说,爱车上一言不合就被贴罚单可以说是最为恼火的事。正是如此,使得车主们更为遵章停车,尤其是停在停车场,可是让车主们最为放心的。然而,即便如此,也未能躲过被违章。今日,在微信封杀是中国互联网公司躲不过的坎儿这两天,王欣,罗永浩,头条一起发布了三款社交产品,其中一款王欣发布的产品马桶刚上线一天多就被微信封杀,这个事情目前成为了热点,也引起了大家的激烈的讨论,有支持微信的,有支持马桶的,近期的热门事件国家帮我们出了一口恶气!这几天的事件我想大家都知道了,奔驰女维权,视觉中国,996等事件很火,特别是一件接着一件,而且是持续火爆,有点你方唱罢我来登台的样子,不像以前的网络事件,这个火了,那个就没人关注了侏儒北欧神话中的类人生物侏儒北欧地区写法Dvergr单数Dvergar众数(儒威尔格)Svartlfar(黑精灵)Dkklfar(暗精灵)是许多奇幻作品中虚构生物矮人(Dwarf)的原型。和另一种虚构生物索尼发布1英寸图像传感器手机XperiaPROI,却只用近60的面积索尼1英寸图像传感器手机XperiaPROI发布被称为能打电话的相机,主摄镜头镜头来自于中国诚瑞光学的1G5P玻塑混合镜头。2021年10月26日,索尼中国宣布推出摄影旗舰微单手机看了看很多招聘需求,感觉这些公司未来都是要倒闭的这几天浏览某个招聘网站,发现很多招聘的人员都非常的不专业,不专业会导致什么?招聘不到人才,或者找到人才后,不符合公司的要求。其实招聘是一个非常重要的事情,googleCEO拉里佩奇无助,太难!被无赖美国公司拖款的九十多天一直没想到,有一天,讨债者,这样的词与我会发生关系。在写这篇文章的时候,很多朋友都劝我,不要闹大了,这样搭上自己公司的未来不值得,但是我认为,士可杀不可辱,我未来即使不做这个行业了光之国第一个堕落入黑暗的奥特战士贝利亚奥特曼剧中设定为昭和系M78星云奥特之星光之国的黑暗奥特曼。在2009年上映的电影宇宙英雄之超银河传说初登场,曾是与奥特之父同时期的战友,在奥特大战争后受到等离子火花塔的力量的诱惑而堕落爱普生亮相第四届进博会以智慧科技承发展之脉,绿动未来(ChinaIT。com讯)第四届中国国际进口博览会(以下简称进博会)如约在上海国家会展中心隆重召开,作为世界上第一个以进口为主题的国家级博览盛会,在大力推动大循环双循环的新发展格
都说骁龙870手机性价比高,唯独有一个短板让人很纠结说起当下最热门的手机处理器,当属于高通骁龙870与高通骁龙888。一个性能好,发热适中一个性能处于顶级水准,谁能控制发热谁就是赢家。市面上的手机,搭载骁龙870处理器的,基本都定位风度翩翩不怕冻,飞乐思发热围巾体验,科技与时尚的结合时至大雪时节,天气渐冷,防寒保暖成为本季穿搭的主要任务。特别是在北方地区,出个门里里外外几件必不可少。穿搭上难免显得臃肿,毫无时尚感可言,这对追求时尚的年轻一代来说,简直太受罪。有九州风神水元素360ARGB水冷体验,让机箱沉浸幻彩空间2020年渐渐迎来尾声,在这一年里,科技的更新与发展潜移默化的走进我们的生活。有时,不知不觉就落伍了。不仅仅使用的产品跟不上时代,就连思想也常常是止步不前。曾有个内蒙古的朋友开玩笑Dyplay降噪精英耳机体验,独特设计,宽频主动降噪主动降噪,在最近的几年中逐渐走进我们的日常生活之中,这得益于各品牌的宣传,也由于技术的升级与成本的降低。主动降噪耳机起初,诞生于航空,用于屏蔽飞行中的噪音,以便商旅人士得到更好的休进销存领域唯一!秦丝荣获中国服装协会店铺解决方案推荐项目新一轮技术变革及其应用在全球范围内迅速孕育兴起,推动着服装行业向数字化智能化转型。秦丝科技为中国超过200万批零商户提供了完善的解决方案,引领着行业发展,助力万千服装实体商户转型。看懂了,服装行业的淡旺季一目了然!做好复盘带你拯救销售额又到了客户捡便宜,商家店内夏秋交替大清仓的时候。商家辛苦赚来的钱,都在仓库里面,库存成为庞大的负担,不利于店铺长期的发展,先来了解和服装行业息息相关的淡旺季,再就活动最后的数据,进什么是网桥,用在哪些领域?网桥(Bridge)像一个聪明的中继器。中继器从一个网络电缆里接收信号,放大它们,将其送入下一个电缆。相比较而言,网桥对从关卡上传下来的信息更敏锐一些。网桥是一种对帧进行转发的技术保安出身成深圳金融大佬,身价从2千变百亿,却因P2P涉黑一夜覆灭深圳素来是一个藏龙卧虎之地,其中最有名的坊间传言是保安变金融大佬,这样的故事一直被人津津乐道。然而随着去年深圳中科创金融控股集团董事长张伟的锒铛入狱,最终这个传言不再成为励志故事,又一快递公司被淘汰?144家加盟商被撬走,10天不派件已屡见不鲜双11将至,很多朋友在微信群里提醒购物时不要让商家选择圆通派送。作为三通一达成员之一,圆通快递还获得了阿里巴巴的投资,圆通到底怎么了?这不得从近期圆通全国性的快递积压问题说起。依靠昔日包头首富自焚往事借14亿做豆奶生意,贷款利息最高96今年以来,国内的公司很多出现了资金链断裂的状况,比如恒大地产和华夏幸福地产,还有紫光集团等,这些公司虽然资金链断裂,但是公司还是有较好的盈利性,因此国家尽力推行破产重整,从而改善公克服欲望战胜自己行情来了,持有的股票涨了,而且涨得很多,怎么办呢?拿着自己的股票问别人,总是求不得真经。股市的钱是挣不完的,但能亏的完(融资被平仓)。我是小小散,但却是老韭菜,入市很久来了。现在不