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知识点总结(注解-解析注解)相关推荐

  1. java扫描指定package注解_java随笔-扫描使用指定注解的类与方法

    前几天项目中让扫描出所有使用Restful API的方法.刚开始还想着用python过滤关键字来查找的,后来想想可以使用反射来搞的.主要包含以下三个步骤: 根据包名解析包的具体路径 查找指定包下指定注 ...

  2. java 解析二进制_Java二进制Class文件格式解析

    一.Java Class文件是什么 <The JavaTM Virtual Machine Specification>(Second Edtion)中有表述:Java Class文件由8 ...

  3. java 文件解析异常_java中异常的解析

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  4. java 魔数_Java 字节码结构解析

    本文通过解析Class文件中字节码的结构,来加深对Java类文件结构的理解.建议先阅读Java类文件结构解析这篇文章. Test.java package org.tianbin.clazz; pub ...

  5. java动态代理_Java 动态代理 原理解析

    示例 需要代理的接口 public interface IHello {public void sayHello(); } 需要代理的类 public class HelloImpl implemen ...

  6. 映射java是什么_java – 映射,绑定和解析有什么区别?

    根据我的理解 What does it mean mapping and what is a mapping tool? 在Java / XML的情况下,映射只不过是表示Java对象模型 进入XML文 ...

  7. java时间解析错误_java.lang.IllegalArgumentException:解析错误-日期格式错误?

    我正在使用变量CURRENT_DATE将当前日期存储在SQLite数据库中.我发现使用的日期格式是yyyy-mm-dd.我想解析代码中的日期,但出现此错误: java.lang.IllegalArgu ...

  8. java spit 点_java split()使用方法解析

    这篇文章主要介绍了java split()使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天写个程序用到java里面的split()函 ...

  9. java jpa 注解_Java : JPA相关以及常用注解

    SpringDataJPA自定义的查询方法 定义规范 And 并且 Or 或 Is,Equals 等于 Between 两者之间 LessThan 小于 LessThanEqual 小于等于 Grea ...

最新文章

  1. puppet自动化运维之puppet的资源基础知识
  2. java dalvik_深入理解Android之Java虚拟机Dalvik
  3. 【python】dist-packages和site-packages的区别
  4. python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...
  5. 使用 ExceptionDispatchInfo 捕捉并重新抛出异常
  6. Stack应用 - 数学表达式(Balanced parentheses)括号完全匹配
  7. call()函数、apply()函数区别与意义
  8. 安装配置NTP服务器
  9. 服务器风扇端子型号,出几样物品-相机连接头,服务器风扇,滤波器,接线端子等等如图...
  10. navicat怎么清除干净
  11. 解决Flash弹窗广告
  12. 汇编语言-实验6(学习打卡Day18)
  13. supervisor控制台运行出错,BACKOFF Exited too quickly
  14. 关于Tomcat在启动时的socket bind failed 730048 错误
  15. 1X的示波器探头为什么会降低示波器带宽
  16. 个人微信开发协议sdk接口API分享
  17. 英菲利普亲王车祸后确认未受伤 事发道路下调限速
  18. 机器学习(一)-导论
  19. WebGL相关框架及网站
  20. phaser -数字华容道

热门文章

  1. 微信开发教程(4)——高级群发接口
  2. python时间模块datetime模块
  3. ip通信基础第九周(下)
  4. gitlab升级-(一)安装一台旧版本
  5. 如何给Pycharm加上头行 # *_*coding:utf-8 *_*?
  6. C语言实现链式栈(LinkStack)
  7. 25行代码实现Promise函数
  8. java的静态内部类
  9. js运动 运动效果留言本
  10. linux 安全 ***检测 杀毒 rootkit