java 解析注解_Java知识点总结(注解-解析注解)
Java知识点总结(注解-解析注解)
@(Java知识点总结)[Java, 注解]
通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。
使用注解步骤:
定义注解
类中使用注解
解析注解
示例:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodAnnotation {
String value();
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value={ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldAnnotation {
String columnName();
String type();
int length();
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value={ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableAnnotation {
String value();
}
@TableAnnotation("tb_student")
public class Student {
@FieldAnnotation(columnName="id",type="int",length=10)
private int id;
@FieldAnnotation(columnName="sname",type="varchar",length=10)
private String name;
@FieldAnnotation(columnName="age",type="int",length=3)
private int age;
@MethodAnnotation("get方法上的注解")
public int getId() {
return id;
}
@MethodAnnotation("set方法上的注解")
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Demo3 {
// 使用反射获取注解,生成类对应的数据库表
private static void test1(Class clazz) {
// 获得类所有的注解
Annotation[] annotations = clazz.getAnnotations();
for (Annotation a : annotations) {
System.out.println(a);
}
// 通过注解的名字获取注解
TableAnnotation t = (TableAnnotation) clazz.getAnnotation(TableAnnotation.class);
System.out.println(t.value());
// 获得属性上的注解
try {
Field f = clazz.getDeclaredField("age");
FieldAnnotation fa = f.getAnnotation(FieldAnnotation.class);
System.out.println("字段名称:" + fa.columnName() + ",字段类型:" + fa.type() + ",字段长度:" + fa.length());
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
}
// 根据获得的表名、字段信息,拼出DDL语句,然后使用JDBC执行这个SQL语句,在数据库中生成相关的表
}
//获取方法上的注解
private static void test2(Class clazz) {
// 获取所有方法上的注解
Method[] ms = clazz.getMethods();
for (Method m : ms) {
boolean isExist = m.isAnnotationPresent(MethodAnnotation.class);
if (isExist) {
MethodAnnotation ma = m.getAnnotation(MethodAnnotation.class);
System.out.println(ma);
}
}
// 获取指定方法上的注解
try {
Method method = clazz.getMethod("getId", null);
Annotation[] as = method.getAnnotations();
for (Annotation a : as) {
if (a instanceof MethodAnnotation) {
MethodAnnotation ma = (MethodAnnotation) a;
System.out.println(ma);
}
}
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Class clazz = null;
try {
clazz = Class.forName("com.gs.Student");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
test1(clazz);
test2(clazz);
}
}
java 解析注解_Java知识点总结(注解-解析注解)相关推荐
- java扫描指定package注解_java随笔-扫描使用指定注解的类与方法
前几天项目中让扫描出所有使用Restful API的方法.刚开始还想着用python过滤关键字来查找的,后来想想可以使用反射来搞的.主要包含以下三个步骤: 根据包名解析包的具体路径 查找指定包下指定注 ...
- java 解析二进制_Java二进制Class文件格式解析
一.Java Class文件是什么 <The JavaTM Virtual Machine Specification>(Second Edtion)中有表述:Java Class文件由8 ...
- java 文件解析异常_java中异常的解析
Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...
- java 魔数_Java 字节码结构解析
本文通过解析Class文件中字节码的结构,来加深对Java类文件结构的理解.建议先阅读Java类文件结构解析这篇文章. Test.java package org.tianbin.clazz; pub ...
- java动态代理_Java 动态代理 原理解析
示例 需要代理的接口 public interface IHello {public void sayHello(); } 需要代理的类 public class HelloImpl implemen ...
- 映射java是什么_java – 映射,绑定和解析有什么区别?
根据我的理解 What does it mean mapping and what is a mapping tool? 在Java / XML的情况下,映射只不过是表示Java对象模型 进入XML文 ...
- java时间解析错误_java.lang.IllegalArgumentException:解析错误-日期格式错误?
我正在使用变量CURRENT_DATE将当前日期存储在SQLite数据库中.我发现使用的日期格式是yyyy-mm-dd.我想解析代码中的日期,但出现此错误: java.lang.IllegalArgu ...
- java spit 点_java split()使用方法解析
这篇文章主要介绍了java split()使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天写个程序用到java里面的split()函 ...
- java jpa 注解_Java : JPA相关以及常用注解
SpringDataJPA自定义的查询方法 定义规范 And 并且 Or 或 Is,Equals 等于 Between 两者之间 LessThan 小于 LessThanEqual 小于等于 Grea ...
最新文章
- puppet自动化运维之puppet的资源基础知识
- java dalvik_深入理解Android之Java虚拟机Dalvik
- 【python】dist-packages和site-packages的区别
- python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...
- 使用 ExceptionDispatchInfo 捕捉并重新抛出异常
- Stack应用 - 数学表达式(Balanced parentheses)括号完全匹配
- call()函数、apply()函数区别与意义
- 安装配置NTP服务器
- 服务器风扇端子型号,出几样物品-相机连接头,服务器风扇,滤波器,接线端子等等如图...
- navicat怎么清除干净
- 解决Flash弹窗广告
- 汇编语言-实验6(学习打卡Day18)
- supervisor控制台运行出错,BACKOFF Exited too quickly
- 关于Tomcat在启动时的socket bind failed 730048 错误
- 1X的示波器探头为什么会降低示波器带宽
- 个人微信开发协议sdk接口API分享
- 英菲利普亲王车祸后确认未受伤 事发道路下调限速
- 机器学习(一)-导论
- WebGL相关框架及网站
- phaser -数字华容道