在Spring中使用自定义注解的本质就是使用Spring 的 AOP编程。

首先创建一个注解@interface

import org.springframework.data.mongodb.core.mapping.Document;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Document
public @interface Zhangxueliang {String value();
}

编写一个切面类,获取注解@Zhangxueliang信息,并对@Zhangxueliang标注的方法进行切面编程

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;/*** @ProjectName springbootdemo_src* @ClassName AnnotationAspect* @Desicription TODO* @Author Zhang Xueliang* @Date 2019/5/15 11:23* @Version 1.0**/
@Aspect
@Component
@Slf4j
public class AnnotationAspect {@Pointcut("@annotation(com.zhangxueliang.demo.springbootdemo.annotation.Zhangxueliang)")public void annotationPointCut() {}@Before("annotationPointCut()")public void before(JoinPoint joinPoint){MethodSignature sign =  (MethodSignature)joinPoint.getSignature();Method method = sign.getMethod();Zhangxueliang annotation = method.getAnnotation(Zhangxueliang.class);System.out.println("打印:"+annotation.value()+" 开始前");}@Around("annotationPointCut()")public Object advice(ProceedingJoinPoint joinPoint){System.out.println("通知之开始");Object resultMsg=null;try {resultMsg=joinPoint.proceed();System.err.println("++++++++"+resultMsg);log.info("==============可以应用于日志打印==============> "+resultMsg.toString());} catch (Throwable e) {e.printStackTrace();}System.out.println("通知之结束");return resultMsg;}@After("annotationPointCut()")public void after() {System.out.println("after方法执行后");}
}

测试注解@Zhangxueliang的使用

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;/*** @ProjectName springbootdemo_src* @ClassName Test* @Desicription TODO* @Author Zhang Xueliang* @Date 2019/5/15 11:26* @Version 1.0**/
@SpringBootApplication
@RestController
//@EnableAspectJAutoProxy
public class Test {public static void main(String[] args) {SpringApplication.run(Test.class, args);}@RequestMapping("/annotation")@Zhangxueliang("测试注解1")public List<String> getById() {System.err.println("o+++++++++++++++++");List<String> list = new ArrayList<String>();list.add("1");list.add("qwe");list.add("asd");return list;}
}

Spring 自定义注解使用案例 首先创建一个注解@interface相关推荐

  1. 基于 Spring Boot 2.x 使用 Activiti 创建一个简易的请假流程

    文章目录 1 摘要 2 准备工作 3 请假流程图 3 核心代码 3.1 数据库表 3.2 流程管理工具类 3.3 流程的使用 4 推荐参考资料 5 Github 源码 ​ ​ ​ 1 摘要 工作流是需 ...

  2. @order注解_Spring Boot+OAuth2,一个注解搞定单点登录!

    今日干货 刚刚发表查看:66666回复:666 公众号后台回复 ssm,免费获取松哥纯手敲的 SSM 框架学习干货. 需要先说一下,松哥最近写的教程,都是成系列的,有一些重复的东西写来写去就没意思了, ...

  3. 实现一个spring webservice服务端二:创建一个可以访问的webservice

    在文章中,我学习了spring-ws基本的知识,在文章最后我也实现一个简单的项目,访问可以看到wsdl文件,但是我也遇到了一个问题,无法通过soap UI的测试,经过这一段业余时间的学习,这个问题解决 ...

  4. 案例:创建一个学生管理系统(PXSCJ1)的数据库(SQL)

    1.新建数据库:PXSCJ1 --创建数据库CREATE DATABASE PXSCJ1 --创建并确认属性:XSB.KCB.CJB(以下代码用于2.3.4.5题) use PXSCJ1 create ...

  5. SSM之一(使用idea创建一个Spring+SpringMVC的项目)

    文章目录 1. 使用idea创建一个基本的maven项目(Web版本) 2. 完善目录结构 3. 相关依赖 4. 配置spring与springmvc 1. 使用idea创建一个基本的maven项目( ...

  6. spring IOC基本配置(xml配置和注解配置)

    目录 Spring IOC IOC是什么 IOC可以做什么 依赖注入 IOC和DI IOC容器 Bean 配置IOC容器 spring ioc 依赖 XML配置 实例化容器 使用容器 xml配置详解 ...

  7. android怎么创建一个包命名空间,从Android的jar lib中声明命名空间

    我正在创建一个Android SDK作为jar.它包含一些自定义视图和自定义参数.我想创建一个嵌入式解决方案,开发人员除了将jar放入libs文件夹之外不需要做任何其他操作.我无法参加一个真正的图书馆 ...

  8. 注解报错_Java中的注解使用:全面性的总结一下

    前话: 今天,我们又来聊一下注解的使用,做一下详细的解析,也介绍了自定义注解,请耐心往下看哟! 注解的介绍: 在2005年,sun公司推出了jdk1.5,同时推出的注解功能吸引了很多人的目光,使用注解 ...

  9. java的注解方式_详解Java注解的实现与使用方法

    详解Java注解的实现与使用方法 Java注解是java5版本发布的,其作用就是节省配置文件,增强代码可读性.在如今各种框架及开发中非常常见,特此说明一下. 如何创建一个注解 每一个自定义的注解都由四 ...

最新文章

  1. ECS(Linux)连接RDS,使用命令行方式连接实例
  2. HDU2648(map的应用)
  3. Unity 代码集锦之图片处理
  4. hashcode的理解
  5. C#字符串、字节数组和内存流间的相互转换 - IT浪潮之巅
  6. pdf转换成可编辑的word转换器
  7. 从C++到.NET 揭开多态的面纱
  8. linux调整大页内存,Linux 系统如何进行大页面配置
  9. 7-3 括号匹配 (15 分)
  10. 期货品种产业链图表_化工
  11. 数据来源渠道及采集工具_【公示公告】涡阳县村级光伏扶贫电站数据采集器更换采购安装项目单一来源采购标前公示...
  12. FastFel解析一个公式的步骤
  13. JavaWeb(一)
  14. FIT2CLOUD云管平台完成华为云鲲鹏云服务兼容性认证
  15. nutch mysql hadoop_nutch+hadoop 配置使用
  16. android 公式编辑器,公式编辑器
  17. Python 作业4+实验三
  18. albedo diffuse specular
  19. [网站] 中国古代名画鉴赏网站
  20. LINUX驱动、系统底层

热门文章

  1. 【NLP】使用Python可视化Word2vec的结果
  2. Math4DS 直播 NO.10 | “机器学习之父”、加州大学伯克利分校迈克尔·乔丹
  3. 李沐《动手学深度学习》新增PyTorch和TensorFlow实现,还有中文版
  4. 【Python应用】Python+Kepler.gl轻松制作酷炫路径动画
  5. 小孩都看得懂的推荐系统
  6. 爆火“捏脸”APP崽崽ZEPETO,如何开启虚拟世界的社交IP?
  7. 三年深入探索,网易云信让在线医疗做到技术“在线”
  8. 迪粉汇接入网易云信,打造比亚迪车友亲密沟通利器
  9. 数据结构导论初步理解
  10. c#图片上绘制半透明矩形