news 2026/5/25 18:54:54

(22) 回顾注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(22) 回顾注解

注解的存在主要是为了简化XML的配置。Spring6倡导全注解开发
我们来回顾一下:

  • 第一:注解怎么定义,注解中的属性怎么定义?
  • 第二:注解怎么使用?
  • 第三:通过反射机制怎么读取注解?

注解怎么定义,注解中的属性怎么定义?

packagecom.powernode.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target(value={ElementType.TYPE})@Retention(value=RetentionPolicy.RUNTIME)public@interfaceComponent{Stringvalue();}

以上是自定义了一个注解:Component
该注解上面修饰的注解包括:Target注解和Retention注解,这两个注解被称为元注解。
Target注解用来设置Component注解可以出现的位置,以上代表表示Component注解只能用在类和接口上。
Retention注解用来设置Component注解的保持性策略,以上代表Component注解可以被反射机制读取。
String value(); 是Component注解中的一个属性。该属性类型String,属性名是value。
注解怎么使用?

packagecom.powernode.bean;importcom.powernode.annotation.Component;@Component(value="userBean")publicclassUser{}

用法简单,语法格式:@注解类型名(属性名=属性值, 属性名=属性值, 属性名=属性值…)
userBean为什么使用双引号括起来,因为value属性是String类型,字符串。
另外如果属性名是value,则在使用的时候可以省略属性名,例如:

packagecom.powernode.bean;importcom.powernode.annotation.Component;//@Component(value = "userBean")@Component("userBean")publicclassUser{}

通过反射机制怎么读取注解?
接下来,我们来写一段程序,当Bean类上有Component注解时,则实例化Bean对象,如果没有,则不实例化对象。
我们准备两个Bean,一个上面有注解,一个上面没有注解。

packagecom.powernode.bean;importcom.powernode.annotation.Component;@Component("userBean")publicclassUser{}
packagecom.powernode.bean;publicclassVip{}

假设我们现在只知道包名:com.powernode.bean。至于这个包下有多少个Bean我们不知道。哪些Bean上有注解,哪些Bean上没有注解,这些我们都不知道,如何通过程序全自动化判断。

packagecom.powernode.test;importcom.powernode.annotation.Component;importjava.io.File;importjava.net.URL;importjava.util.Arrays;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;/** * @author 动力节点 * @version 1.0 * @className Test * @since 1.0 **/publicclassTest{publicstaticvoidmain(String[]args)throwsException{// 存放Bean的Map集合。key存储beanId。value存储Bean。Map<String,Object>beanMap=newHashMap<>();StringpackageName="com.powernode.bean";Stringpath=packageName.replaceAll("\\.","/");URLurl=ClassLoader.getSystemClassLoader().getResource(path);Filefile=newFile(url.getPath());File[]files=file.listFiles();Arrays.stream(files).forEach(f->{StringclassName=packageName+"."+f.getName().split("\\.")[0];try{Class<?>clazz=Class.forName(className);if(clazz.isAnnotationPresent(Component.class)){Componentcomponent=clazz.getAnnotation(Component.class);StringbeanId=component.value();Objectbean=clazz.newInstance();beanMap.put(beanId,bean);}}catch(Exceptione){e.printStackTrace();}});System.out.println(beanMap);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 6:56:15

2025年项目管理系统全新排名出炉:聚焦私有部署、信创适配与全流程闭环

在2025年&#xff0c;企业对项目管理系统的核心诉求已从基础的任务协同升级为“安全可控、合规适配、链路贯通”的综合能力考核。私有部署带来的数据主权保障、信创适配契合的国产化发展浪潮&#xff0c;以及全流程闭环实现的管理效率跃迁&#xff0c;成为衡量系统竞争力的三大…

作者头像 李华
网站建设 2026/5/24 14:00:11

ROS2核心概念之动作

这些应用功能的实现中&#xff0c;另外一种ROS通信机制也会被常常用到——那就是动作。从这个名字上就可以很好理解这个概念的含义&#xff0c;这种通信机制的目的就是便于对机器人某一完整行为的流程进行管理。 回到顶部 一、通信模型 举个例子&#xff0c;比如我们想让机器…

作者头像 李华
网站建设 2026/5/25 5:26:34

解密Prompt系列66. 视觉Token爆炸→DeepSeek-OCR光学压缩

着 DeepSeek-OCR这篇论文&#xff0c;本章我们来回顾下多模态大模型&#xff08;VLM&#xff09;的核心技术演进。很多人认为&#xff1a;图像Token的信息密度和效率远不如文本。但 DeepSeek-OCR的核心价值&#xff0c;就是用实践证明了这是一个伪命题。它通过一套巧妙的串行视…

作者头像 李华
网站建设 2026/5/26 6:56:50

Typst列表符号终极指南:从异常诊断到完美渲染

Typst列表符号终极指南&#xff1a;从异常诊断到完美渲染 【免费下载链接】typst A new markup-based typesetting system that is powerful and easy to learn. 项目地址: https://gitcode.com/GitHub_Trending/ty/typst 在使用Typst进行文档排版时&#xff0c;列表符号…

作者头像 李华
网站建设 2026/5/26 6:55:50

NetBox 自动化导入资产 - IP地址

简介本文章主要讲解使用orb-agent 扫描网络收集IP信息&#xff0c;通过Diode 摄取到NetBox。这两个工具都是NetBox官方的自动化发现产品&#xff0c;下面是示意图。------------------| orb-agent ||------------------|| 网络扫描/资产发现 |------------------|| grpc 通过NM…

作者头像 李华