当前位置: 首页 > news >正文

Day05注解和动态代理

注解Annotation

注解作用-让程序根据注解决定该怎么执行程序

自定义注解

注解的原理

本质上就是一个接口,只不过你这个接口继承了Annotation接口

所以你在注解定义里写的其实都是抽象类(和接口一样)

但有注意点,注解的成员和接口不一样,他有限制类型

允许的类型说明
基本类型int,double,boolean
String字符串
Class类的类型
枚举枚举类型
注解嵌套注解
以上类型的数组String[],int[]

元注解-----注解 (动词)注解(名词)的注解(名词)

用于限定注解的作用范围

介绍俩注解

@Target

如上述,Target这个注解就可以去注解其他注解,然后限定其位置

@Retention

上述我们几乎一直都会选择第三种RUNTIME!!!

注解的解析

示例

创建一个注解,名字为MyTest2,限制生存时间和使用位置为类和方法@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD}) public @interface MyTest2 { String value(); double aaa() default 100; String[] bbb() }
创建一个测试类,在里面再创建一个方法,分别在类上和方法上使用注解 @MyTest2(value="123",bbb={"1","2"}) public class Demo { @MyTest2(value="1234",bbb={"888","666"}) public void test1(){ } }
public class AnnotationTest3 { public static void main(String[] args) throws Exception { Demo d=new Demo(); Class c=d.getClass(); Method m = c.getDeclaredMethod("test1");//先判断是否存在该注解if(c.isAnnotationPresent(MyTest2.class)) { MyTest2 a = (MyTest2) c.getDeclaredAnnotation(MyTest2.class); System.out.println("类上的注解解析如下"); String value = a.value(); System.out.println(value); double aaa = a.aaa(); System.out.println(aaa); String[] bbb = a.bbb(); for (String s : bbb) { System.out.println(s); } }//先判断是否存在该注解System.out.println("================================="); if(m.isAnnotationPresent(MyTest2.class)){ MyTest2 a = m.getDeclaredAnnotation(MyTest2.class); System.out.println("方法上的注解解析如下"); String value = a.value(); System.out.println(value); double aaa = a.aaa(); System.out.println(aaa); String[] bbb = a.bbb(); for (String s : bbb) { System.out.println(s); } } System.out.println("================================="); Annotation[] ds2 = m.getDeclaredAnnotations(); for (Annotation annotation : ds2) { System.out.println(annotation); } Annotation[] ds = c.getDeclaredAnnotations(); for (Annotation annotation : ds) { System.out.println(annotation); } } }

注解的应用场景

public class Demo { public static void main(String[] args) throws Exception { Demo d=new Demo(); Class c=Demo.class; Method[] methods = c.getDeclaredMethods(); for(Method method : methods){ if(method.isAnnotationPresent(MyTest.class)){ MyTest annotation = method.getDeclaredAnnotation(MyTest.class);int count=annotation.count();-----这里拿到注解的count字段for (int i = 0; i < count; i++) { method.invoke(d); } } } } @MyTest(count = 5)-----这里的参数其实可以用来做很多功能,这变给的例子就是可以控制执行方法的次数public void run(){ System.out.println("快跑"); } @MyTest public void show(){ System.out.println("看电影"); } @MyTest public void eat(){ System.out.println("吃东西"); } }

注解的参数其实可以通过框架实现很多操作,比如执行的顺序order=1,2,3....比如是否忽略不执行该方法ignore=true/false等等等等

动态代理proxy

http://www.jsqmd.com/news/696263/

相关文章:

  • 从零到一:打造一份让HR眼前一亮的ERP财务实施顾问简历
  • 2026年质量好的二手活动板房回收/四川临时居住活动板房/四川个人住人活动板房批量采购厂家推荐 - 行业平台推荐
  • 从CRIS到OVD:拆解文本驱动目标检测的演进之路
  • Qwen3-ASR-1.7B开源模型教程:Python调用API实现批量音频转文本
  • ARM内存管理与MPAM技术解析
  • 图像描述生成:Inject与Merge架构对比与实践
  • 设计工具:主流品类盘点与高效使用指南
  • 水肥一体机厂家推荐全汇总!详解移动水肥一体机定做厂家、智慧农业物联网,测评山东正博智造的水肥一体机怎么样 - 栗子测评
  • STM32F103C8T6核心板入门:用CubeMX和Keil5实现按键控制LED(附消抖代码)
  • 2026年Q2岩棉板技术拆解与合规采购实操指南 - 优质品牌商家
  • 微信小程序自定义导航栏下,position: sticky失效?手把手教你动态计算top值(附代码)
  • 从信号处理到图像压缩:用Python手把手理解傅里叶矩阵与FFT的底层原理
  • Voxtral-4B-TTS-2603开源TTS模型详解:支持20音色+多语言的GPU优化部署方案
  • 国产化调试卡在attach进程?VSCode Remote-SSH+国密SM4隧道+自研调试代理的4层穿透方案,仅限首批信创试点单位内部验证
  • 上海力全义房地产经纪有限公司联系方式查询:企业办公选址服务商背景解析与通用联系途径参考 - 品牌推荐
  • 突破传统连接束缚:BetterJoy创新方案让Switch手柄在PC模拟器上完美工作
  • 2026年热门的智能温控器/地暖温控器/温控器长期合作厂家推荐 - 品牌宣传支持者
  • 别只盯着ArcGIS了!盘点那些能轻松打开USGS .dem高程数据的冷门神器
  • PolarStore:云原生数据库存储系统的双模压缩技术解析
  • 10块钱的合宙Air001开发板到手,用Keil MDK点灯我踩了这些坑(附完整配置流程)
  • PyAutoGUI实战:从零构建GUI自动化脚本
  • 【OpenMV+STM32】PID算法调优与二维云台色块追踪实战
  • 如何永久备份微信聊天记录?本地免费工具WeChatMsg终极指南
  • 还在纠结设备选购?一文理清深圳灌胶机、深圳点胶机哪家好?天丰泰灌胶机点胶机厂家深度测评 - 栗子测评
  • CSS如何通过JS修改CSS变量_使用setProperty动态更新样式
  • 前端测试的 Cypress 最佳实践:从入门到精通
  • RK3568平台GC2093传感器AE参数实战调优:从闪烁到过曝的解决之道
  • 智能化设计工具落地路径:实施框架与全流程实操指南
  • FLUX.1-Krea-Extracted-LoRA惊艳效果:水晶玻璃器皿内部光线折射路径
  • fMRIprep输出结果全解析:除了HTML报告,这些NIfTI和JSON文件你读懂了吗?