在实际开发中,很多时刻我们会有记录请求日志,定时任务日志等需求,在每个方法中都编写相同的代码去记录日志显然是不合理的。

Spring已经为我们提供了面向切面编程的思想,不妨简单的使用下自定义注解。

简单自定义注解分四步:

1:在配置中打开aop编程

<!-- 自定义AOP --><aop:aspectj-autoproxy proxy-target-class="true"><aop:include name="serviceAspect" /></aop:aspectj-autoproxy><bean id = "serviceAspect" class="com.thc.tenantcenter.aspect.LogAspect"></bean>

 class指向的是切面解析类下文会有提到

2:编写自己自定义的注解

package com.thc.tenantcenter.aspect;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LogAnnotation {String desc() default "打印日志";
}

3:编写自己的切面实现类,就是上文所说的bean指向的路径

package com.thc.tenantcenter.aspect;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect //该注解标示该类为切面类
@Component //注入依赖
public class LogAspect {  //标注该方法体为后置通知,当目标方法执行成功后执行该方法体  @AfterReturning("within(com.thc.tenantcenter..*) && @annotation(rl)")  public void addLogSuccess(JoinPoint jp, LogAnnotation rl){  Object[] parames = jp.getArgs();//获取目标方法体参数  for (int i = 0; i < parames.length; i++) {  System.out.println(parames[i]);  }  System.out.println(jp.getSignature().getName());  String className = jp.getTarget().getClass().toString();//获取目标类名  System.out.println("className:" + className);className = className.substring(className.indexOf("com"));  String signature = jp.getSignature().toString();//获取目标方法签名  System.out.println("signature:" + signature);}
}

 4:在com.thc.tenantcenter包下及子包下方法上添加自己定义的注解

    @LogAnnotation(desc = "通过ID获取实体信息")@Override                                                                                              public AdminLog getAdminLogById(Integer id) {                                                    return adminLogMapper.getAdminLogById(id);                                                   }    

运行结果为:

1
getAdminLogById
className:class com.thc.tenantcenter.biz.adminlog.service.impl.AdminLogServiceImpl
signature:AdminLog com.thc.tenantcenter.biz.adminlog.service.impl.AdminLogServiceImpl.getAdminLogById(Integer)

以上是简单的自定义注解使用,希望能帮助初学者解决问题

转载于:https://www.cnblogs.com/zhuxiansheng/p/7805552.html

Spring自定义注解简单使用四步走相关推荐

  1. Java 自定义注解简单使用

    Java 自定义注解简单使用 文章目录 Java 自定义注解简单使用 第一步:在 pom.xml 下引入反射框架 第二步:自定义注解 第三步:写两个测试实体类 第四步:写个工具类扫描被注解的类(核心) ...

  2. 最佳途径 | 容器规模化落地如何四步走?

    随着云原生时代的发展,传统 IT 基础设施加速云化,云原生化成为云上的必然趋势.作为云原生代表技术之一,容器技术可帮助企业提升 IT 架构的敏捷性,加速应用创新,帮助企业更加灵活地应对商业发展中的不确 ...

  3. 灾害应急管理信息化建设“四步走”——以水旱灾害为例

    引言 中国是世界上受自然灾害影响最为严重的国家之一,其中又以水旱灾害的影响最大.由于我国领土面积广大,河湖众多,且地处亚欧大陆和太平洋之间,季风气候盛行,降水时空分布不均,导致了我国的水旱灾害具有种类 ...

  4. Spring自定义注解

    转载自:Spring自定义注解 前言 自定义注解在开发中是一把利器,经常会被使用到.在上一篇文章中有提到了自定义校验注解的用法. 然而最近接到这样一个需求,主要是针对某些接口的返回数据需要进行一个加密 ...

  5. python抓取内存中的网页_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...

  6. 如何学好编程?黄金四步走

    关于编程学习的最佳方法就是:重复地阅读代码和编写代码(读>写代码>读>写代码),阅读书籍.博客文章.开源代码,了解语言或系统,自己实际去写代码. 下面分为四步走给大家说下! 第一步: ...

  7. 数据库管理专才四步走

    数据库管理专才四步走: 数据库管理专才难觅 RHI咨询公司执行董事凯瑟琳·斯潘塞·李认为:"精通Oracle和微软SQL Server管理,并能把电子商务应用中收集到的大量数据转变成'商业智 ...

  8. 推进教育人工智能?网易云和网易波特 “四步走”

    是的,以上就是在网易云创大会以"唤醒未来,技术革新推动知识共享"为主题的教育论坛上,网易云通信与视频副总经理王丹丹分享的网易云AI助教演示视频.未来,网易云将携手网易波特基于通信与 ...

  9. 跟相亲对象微信聊什么?聊天绝学四步走一试便知有没有

    跟相亲对象微信聊什么?聊天绝学四步走一试便知有没有. 很多男生在微信上和妹子聊天时,经常聊着聊着就冷场了,搞得彼此很尴尬,特别是对方是你相亲对象的时候,更是巨尬无比.那么从微信上该怎么和女生聊天,才能 ...

最新文章

  1. php_标准类型-学习笔记
  2. java 执行linux命令行_10个高效Linux技巧及Vim命令对比
  3. 从flink-example分析flink组件(3)WordCount 流式实战及源码分析
  4. MySQL中的enum,char与varchar,decimal
  5. 日志分割工具cronolog
  6. css outline color,css outline-color属性怎么用
  7. 【风马一族_xml】xmlp之dtd1
  8. 2014/09/30 Learning Note
  9. oracle 时间戳生成语句(秒级+毫秒级)
  10. 迷宫问题(寻路)和状态空间搜索
  11. 解决PowerDesigner 错误:Invalid repository user or password!
  12. linux运行maya,Debian5.0下成功安装Maya2009!!
  13. 空间点到直线的距离c语言,空间两直线间距离公式(文档篇).doc
  14. 大学生如何应聘高薪IT职位
  15. Android 学习笔记(5)之RxJava解析1
  16. Access和VBA
  17. 使用 Plotly 和 ChartJS 图形库创建 Flask 仪表板
  18. 计算机丢失rtl100.bpl,处理“未曾找到 rtl100.bpl,因而这个利用过程未能启用。重新安装利用过程可能会修复此问题。”...
  19. IPFS云服务器预售登录系统,北宁ipfs云算力预售,IPFS社区社区
  20. 4.1-python爬虫之多线程爬虫

热门文章

  1. MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
  2. 设计模式—工厂模式之简单工厂模式
  3. Python os.path模块的使用
  4. JVM学习笔记之-StringTable String的基本特性,内存分配,基本操作,拼接操作,intern()的使用,垃圾回收 ,G1中的String去重操作
  5. 分表后需要注意的那些事儿
  6. js事件之event.preventDefault()与event.stopPropagation()用法区别
  7. 移动端分享插件使用总结
  8. Javascript设计模式理论与实战:适配器模式
  9. js 过滤script
  10. jQuery 学习笔记之二 (jQuery代码风格)