news 2026/6/24 0:06:20

(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/6/23 13:04:38

2025年十大项目管理系统排名:综合功能、场景与用户口碑的权威榜单

在当下&#xff0c;项目管理系统已成为企业提升运营效率、保障交付质量的核心支撑工具。不同行业、规模的企业对系统的综合功能、场景适配性需求千差万别&#xff0c;而用户口碑与权威评价则成为选型决策的关键参考。本次排名基于某权威行业研究机构联合12家行业协会开展的专项…

作者头像 李华
网站建设 2026/6/23 18:07:48

Docker部署前端项目,收藏这篇就够了

前置工作 1、需要准备的东西 一台Centos服务器并连接 我这是演示用的垃圾云&#xff0c;建议大家上阿里云、腾讯云等。 2、连接云服务器 连接服务器看文章&#xff1a; https://blog.csdn.net/qq_32442973/article/details/119840447 安装Docker环境 Docker有两个分支版本&a…

作者头像 李华
网站建设 2026/6/23 18:11:06

Python+Vue的大学生就业信息管理系统 Pycharm django flask

这里写目录标题项目介绍项目展示详细视频演示感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多的人技术栈文章下方名片联系我即可~解决的思路…

作者头像 李华
网站建设 2026/6/23 18:07:13

15 分钟获现场信号,30 分钟建指挥链路!分布式系统赋能救援 “秒响应”

进入二十世纪以来&#xff0c;全球气候异常加剧&#xff0c;环境破坏引发的连锁反应日益显著 —— 地震震级攀升、洪水波及范围扩大、台风登陆频次增多、山火蔓延速度加快&#xff0c;各类自然灾害不仅造成巨大的人员伤亡与财产损失&#xff0c;更对突发事件的应急响应速度、指…

作者头像 李华
网站建设 2026/6/23 23:04:28

自动化测试中的常见陷阱与规避

随着软件交付周期的不断缩短&#xff0c;自动化测试已成为保障产品质量的关键手段。然而&#xff0c;许多团队在实施过程中陷入重复性陷阱&#xff0c;导致投入产出比失衡。 一、常见陷阱深度解析 1. 过度追求覆盖率陷阱 现象&#xff1a;盲目要求100%测试覆盖率&#xff0c;…

作者头像 李华
网站建设 2026/6/22 21:30:20

6-4 WPS JS宏 不重复随机取值应用

1.示例&#xff1a;function 不重复随机取值(){var snew Set();if(10-1>8){while(true){var numWorksheetFunction.RandBetween(1,10);//RandBetween(1,10)为随机函数s.add(num);if(s.size8){break};//size为集合的个数}}var arr[...s]Console.log(${arr})}function 不重复随…

作者头像 李华