前言

  在了解了自定义注解的入门知识后,以实践的形式,介绍一下通过反射技术获取自定义注解的常用API,例如如何获取自定义注解的成员变量值等等。

由反射获取自定义注解

  为了获得自定义注解信息,本节要用到Java中的灵魂技术——反射!常用API:

// 获取指定类型的注解
public <A extends Annotation> A getAnnotation(Class<A> annotationClass);
// 获取所有注解(包括父类中被Inherited修饰的注解)
public Annotation[] getAnnotations();
// 获取声明的注解(但是不包括父类中被Inherited修饰的注解)
public Annotation[] getDeclaredAnnotations();
// 判断对象上是否被某个注解标注
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
// 获取某个类声明的所有字段
public Field[] getDeclaredFields() throws SecurityException;

  定义一个矩形画图工具类,使用《Spring注解之自定义注解入门》中的注解ShapeAn进行标注:

package com.eg.wiener.service.impl;

import com.eg.wiener.config.ShapeAn;
import com.eg.wiener.service.Shape;
import org.springframework.stereotype.Service; /**
* 矩形
*
* @author Wiener
* @date 2021/1/30
*/
@ShapeAn(value = "rectangleAn", beanName = "矩形画图工具")
@Service
public class Rectangle implements Shape { @Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}

  创建测试类,使用反射技术获取注解类:

package com.eg.wiener.controller;

import com.eg.wiener.config.ShapeAn;

import java.lang.reflect.Method;

public class ShapeController {

    public static void main(String[] args) {
try {
//获取Class对象
Class rectangleClazz = Class.forName("com.eg.wiener.service.impl.Rectangle");
//获取Class对象rectangleClazz所使用的自定义注解 ShapeAn
if (rectangleClazz.isAnnotationPresent(ShapeAn.class)) {
System.out.println("类上使用了ShapeAn注解");
}
ShapeAn shapeAn = (ShapeAn) rectangleClazz.getAnnotation(ShapeAn.class);
// 打印注解属性
System.out.println(shapeAn.beanName());
System.out.println(shapeAn.value()); } catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

  注解在定义好了以后,使用的时候操作注解类型元素像在操作属性,解析的时候操作像在操作方法,是不是很爽?执行上述测试函数,控制台输出结果:

类上使用了ShapeAn注解
矩形画图工具
rectangleAn

  我们虽然为value属性设置了默认值,但是,在使用ShapeAn的时候,由于进行了赋值,因此,这里打印了设定的结果rectangleAn。

结束语

  老铁们,因楼兰胡杨能力有限,文中难免出现瑕疵,如果发现bug或者有更好的idea,请在文章下方留你下的神评妙论!

Spring注解之获取自定义注解信息的更多相关文章

  1. Spring启动时获取自定义注解的属性值

    1.自定义注解 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documen ...

  2. AOP中获取自定义注解的参数值

      目录 一.利用注解实现AOP的基本流程 1.1.创建一个注解,用来注解切点(pointcut) 1.2.创建一个service,使用上面定义的注解来指定切点 1.3.创建Aspect,增加业务逻辑 ...

  3. Spring 实现策略模式--自定义注解方式解耦if...else

    策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 ...

  4. Spring中如何使用自定义注解搭配@Import引入内外部配置并完成某一功能的启用

    文章背景 有一个封装 RocketMq 的 client 的需求,用来提供给各项目收.发消息,但是项目当中常常只使用收或者发消息的单一功能,而且不同的项目 group 等并不相同而且不会变化,可以在项 ...

  5. java反射机制获取自定义注解值和方法

    由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...

  6. Java注解Annotation与自定义注解详解

    Java注解简介 开发中经常使用到注解,在项目中也偶尔会见到过自定义注解,今天就来探讨一下这个注解是什么鬼,以及注解的应用场景和如何自定义注解. 下面列举开发中常见的注解 @Override:用于标识 ...

  7. 深入JAVA注解(Annotation):自定义注解 (转)

    原文出自:http://blog.csdn.net/yjclsx/article/details/52101922 一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义 ...

  8. java 日志脱敏框架 sensitive-v0.0.4 系统内置常见注解,支持自定义注解

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 特性 基于注解的日志脱敏. 可 ...

  9. Java日志脱敏框架 sensitive-v0.0.4 系统内置常见注解,支持自定义注解

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 特性 基于注解的日志脱敏. 可 ...

  10. 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

随机推荐

  1. 基于webman实现的服务层框架-webman-biz-framework

    简介 webman的基础上扩展的一个服务层框架,基于分层体系结构的代码模式. 如果觉得有用,可以帮我在webman-biz-framework点个小星星哟,也希望大家交流 分层体系结构的代码模式 什么 ...

  2. jquery简单的上传图片预览

    html <div id="bcd"></div> <input type="file" id="abc"&g ...

  3. mysql 2003远程访问失败 mysql8配置远程访问

    # mysql -uroot -p #进入数据库 > use mysql;#进入数据库 > select host, user, authentication_string, plugin ...

  4. PIL或Pillow学习2

    接着学习下Pillow常用方法: PIL_test1.py : ''' 9, Pillow图像降噪处理 由于成像设备.传输媒介等因素的影响,图像总会或多或少的存在一些不必要的干扰信息,我们将这些干扰信 ...

  5. 【译】Visual Studio(v17.13)中新的调试和分析特性

    最新的 Visual Studio 更新(v17.13)带来了一组强大的调试和分析功能,旨在加快故障排除速度,使其更高效.借助本次发布的 AI 驱动功能,变量分析和数据检查更智能.更直观,问题更容易识 ...

  6. 【Java】基本语法

    一.语言概述 整体语言概述 (一)Java语言概述 1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件 系统软件:windows , mac os , ...

  7. 【Python】解决“Tk_GetPixmap: Error from CreateDIBSection”闪退问题

    解决Python使用Tkinter的Notebook切换标签时出现的"Tk_GetPixmap: Error from CreateDIBSection 操作成功完成"闪退问题 零 ...

  8. HTML5 定时通知

    通过setInterval()和Notification来实现定时通知功能. demo <script> window.onload = function () { //每10秒弹出一个桌 ...

  9. 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

    本次演示部署环境:Windows 10专业版,转载请说明出处 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在 ...

  10. Codeforces Round 1016 (Div. 3)题解

    题目地址 https://codeforces.com/contest/2093 锐评 在所有题意都理解正确的情况下,整体难度不算太难.但是偏偏存在F这么恶心的题意,样例都不带解释一下的,根本看不懂题 ...