java注解示例程序
时间:2022-05-04
本文章向大家介绍java注解示例程序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
MyAnno.java
package com.yawn.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({
ElementType.METHOD,
ElementType.TYPE,
ElementType.FIELD,
ElementType.PARAMETER})
// 注解的生命周期(源码、编译时、运行时)
@Retention(RetentionPolicy.RUNTIME)
// 允许继承
@Inherited
// 生成javadoc时包含的注解的信息
@Documented
public @interface MyAnno {
String desc() default "";
String name();
int age() default 18;
}
TestAnno.java
package com.yawn.annotation;
@MyAnno(name="yawn", desc="good boy")
public class TestAnno {
@MyAnno(name="tempreture", desc="")
private double tempreture;
@MyAnno(name="iii")
public String iii;
@MyAnno(name="ageee")
private Integer ageee;
@MyAnno(name="method ", desc="desc")
public void test(@MyAnno(name="id")String id, @MyAnno(name="size")int size){
}
}
Test.java
package com.yawn.annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import org.junit.Before;
public class Test {
Class<?> clazz;
@Before
public void before() throws ClassNotFoundException{
clazz = Class.forName("com.yawn.annotation.TestAnno");
}
/*
* 类上的注解
*/
@org.junit.Test
public void test(){
printAnnoInfo(clazz);
}
/*
* 成员变量上的注解
*/
@org.junit.Test
public void test2() throws ClassNotFoundException{
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
printAnnoInfo(field);
}
}
/*
* 方法上的注解
*/
@org.junit.Test
public void test3() throws ClassNotFoundException{
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
printAnnoInfo(method);
}
}
/*
* 方法参数上的注解
*/
@org.junit.Test
public void test4() throws ClassNotFoundException{
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
Parameter[] params = method.getParameters();
for (Parameter parameter : params) {
printAnnoInfo(parameter);
}
}
}
private void printAnnoInfo(AnnotatedElement element){
if (element.isAnnotationPresent(MyAnno.class)) {
MyAnno myAnno = element.getAnnotation(MyAnno.class);
System.out.println("==> "+element.getClass());
System.out.println("[name="+myAnno.name()+", age="+myAnno.age()+", desc="+myAnno.desc()+"]");
System.out.println();
}
}
}
测试结果:
==> class java.lang.Class
[name=yawn, age=18, desc=good boy]
==> class java.lang.reflect.Field
[name=tempreture, age=18, desc=]
==> class java.lang.reflect.Field
[name=iii, age=18, desc=]
==> class java.lang.reflect.Field
[name=ageee, age=18, desc=]
==> class java.lang.reflect.Method
[name=method , age=18, desc=desc]
==> class java.lang.reflect.Parameter
[name=id, age=18, desc=]
==> class java.lang.reflect.Parameter
[name=size, age=18, desc=]
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【技术创作101训练营】Git 如何成功配置SSH key连接多个代码平台?
- 深入浅出iOS内存管理-技术创作101训练营
- 聊聊原型 Prototype | 技术创作101训练营
- Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,支持加密表格文档
- PUMA560机器人工具箱运动控制A:路径规划-运动学
- Android 3分钟带你入门开发测试
- Spring Boot 知识清单(一)SpringApplication
- Linux下的IO监控与分析
- pytorch+Unet图像分割:将图片中的盐体找出来
- html 用浏览器打开中文乱码解决方法
- SQLServer 数据库字符集、版本号sql语句查询语法
- chrome 浏览器自保留端口、安全端口有哪些?chrome不能访问某个端口的环境网址,但是其它的浏览器可以访问原因及解决办法。
- MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
- MobaXterm工具连接Linux服务器入门使用手册,国产化泰山服务器连接工具使用演示
- Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示