java自定义注解学习笔记

注解学习笔记之自定义注解

@Target({1,2,3,4,5,6,7})

  • 1.ElementType.CONSTRUCTOR:用于描述构造器
  • 2.ElementType.FIELD:用于描述域
  • 3.ElementType.LOCAL_VARIABLE:用于描述局部变量
  • 4.ElementType.METHOD:用于描述方法
  • 5.ElementType.PACKAGE:用于描述包
  • 6.ElementType.PARAMETER:用于描述参数
  • 7.ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention(1/2/3)

  • 1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
  • 2.RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
  • 3.RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

自定义注解的练习代码

SxtTable

  • 类和表的对应注解
/*** 自定义一个类和表的对应注解*/import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)//指明此注解用于注解类
@Retention(RetentionPolicy.RUNTIME)//指明注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
public @interface SxtTable {String value();//值为类对应的表名
}

SxtField

  • 属性注解
/*** 自定义一个属性注解*/import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SxtField {String columnName();//表中字段的列名String type();//字段的类型int length();//字段的长度
}

SxtStudent

  • 学生类
/*** 创建一个student类并使用自定义的注解*/
@SxtTable("tb_student")//对类使用注解
public class SxtStudent {@SxtField(columnName = "id",type ="int",length = 10)//对属性id使用注解private int id;@SxtField(columnName = "sname",type ="varchar",length = 10)//对属性studentName使用注解private String studentName;@SxtField(columnName = "age",type ="int",length = 4)//对属性age使用注解private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

SxtTest

  • 测试类获取注解信息并打印
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;/*** 使用反射读取注解信息,模拟注解信息处理的流程*/
public class SxtTest {public static void main(String[] args) {try {Class clazz = Class.forName("com.sxt.SxtStudent");//获得类所有的注解(这只直接获得所有有效的注解)Annotation[] annotations = clazz.getAnnotations();for (Annotation annotation : annotations) {//打印获取到的注解信息System.out.println(annotation);}//也可以获得指定的注解(获得指定的注解)这里指定的是SxtTable 如果有多个类注解也可以依次指定SxtTable sxtTable = (SxtTable) clazz.getAnnotation(SxtTable.class);//打印获取到的注解信息System.out.println(sxtTable.value());//获得属性的注解(这里只拿studentName这一个属性来做示例)Field studentName = clazz.getDeclaredField("studentName");SxtField sxtField = studentName.getAnnotation(SxtField.class);//打印获取到的注解信息System.out.println(sxtField.columnName()+"--"+sxtField.type()+"--"+sxtField.length());//根据获得的表名,字段信息,可以通过jdbc 执行sql语句在数据库中生成对应的表//本例用来练习自定义注解故不再往下往下写只对信息进行了打印} catch (Exception e) {e.printStackTrace();}}
}

转载于:https://www.cnblogs.com/cqzy/p/10924011.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[xsy3132]数表

题意:一个$n\times m$的数表,数值$\in[0,4)$,你可以任意次选择一行或一列$1,\text{mod }4$,要最小化所有数的和 因为$n\leq10$,所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$,以下使用不进位加法 定…

linux 下载、安装 maven

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 创建maven的文件夹并下载maven的tar包到此文件夹中 //进入一个目录 cd /usr/local//创建一个文件夹 mkdir maven//下载maven的tar包…

ELK4之进阶学习

1.精确查找和模糊查找(term和match的区别) match经过分析(analyer)的, term是不经过分词,直接去倒排索引中查找精确的值. 2.建议器的简介(最左前缀或者自带的做) (1)直接用现成的 (2)不只是纠错,还有建议等等. (3)优点:用户体验,服务器减少请求(减少压力,太耗电了,热量太大) (4…

女人必知 教你认清6种隐性坏男人

周围不乏有女朋友喜欢历数往事、追忆曾擦肩而过的男人,有的说如果不是自己太苛求提早要见他家人引起反感,早就和心爱的人俪影双双甜蜜快乐了,还有的说暗恋的男生那一夜向他表露情感、她万分感动、可男生最后提出上床她拒绝了、因而错失了一段…

c# 编程学习(二)

2019独角兽企业重金招聘Python工程师标准>>> 标识符是对程序中的各个元素进行标识的名称。  只能使用字母(大写和小写)、数字和下划线  标识符必须以字母或下划线开头 变量是容纳值的存储位置。可将变量想象成容纳临时信息的容器 命名变量的建议: …

linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、Linux 下使用 nohup Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。 …

PowerDesigner表结构和字段大小写转换

原文:https://www.cnblogs.com/zhzhang/p/3946609.html 【转】PowerDesigner表结构和字段大小写转换 【转自】http://blog.csdn.net/xysh1991/article/details/8016192 使用方法:进入PowerDesigner,打开一个PDM,在菜单栏找到&…

解决:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.情景描述 :我只是想安装运行 rocketmq,执行命令: sh bin/tools.sh org.apache.rocketmq.example.…

深入理解C++ 虚函数表

目录 深入理解C 虚函数表虚函数表概述单继承下的虚函数表派生类未覆盖基类虚函数派生类覆盖基类虚函数多继承下的虚函数表无虚函数覆盖派生类覆盖基类虚函数钻石型虚继承总结几个原则安全性问题深入理解C 虚函数表 ​ C中的虚函数的作用主要是实现了多态的机制。关于多态&#…

react-native-baidu-map使用及注意问题

使用组件: react-native-baidu-map 获取百度地图API_KEY 地址:lbsyun.baidu.com,在控制台成功创建应用后,就可以看到应用的api key了 安装 yarn add react-native-baidu-map 复制代码原生部分 Android配置 react-native link reac…

简单扫清身体垃圾

“我们的身体在被‘设计’之初,就拥有了自主扫除体内垃圾的功能。只不过,这需要我们按照正确的方法去激发它 。”美国畅销书作者乔斯卡曼和朱莉佩莱斯,在她们去年合著的《自我清洁》一书中强调了养成良好生活习惯可为身体排毒的重要性。 近日…

linux (阿里云 CentOS7) 中安装配置 RocketMQ

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 JDK1.8的安装: 1.检查系统的JDK版本 根目录下操作:cd java -version 2.检测JDK安装包 rpm -qa | grep ja…

Bootstrap简介

1.使用准备 1.1 Bootstrap的下载 http://www.bootcss.com,下载用于生产环境的Bootstrap即可。 1.2 Bootstrap包含的内容 ● 全局CSS:基本的 HTML 元素均可以通过 class 设置样式并得到增强效果;还有先进的栅格系统。 ● 组件:无数…

用TortoiseGit时的实用git命令

生成并获取 sshkey: ssh-keygen -t rsa -C "xxxxxxxxxx.com" cat ~/.ssh/id_rsa.pub 克隆仓库: git clone xxxxxx/xxx.git 重命名文件: mv file_name new_file_name git目录区分大小写: git config core.ignorecase fal…

有一种失败叫瞎忙

很多时候,我们都在不知不觉的瞎忙,为了避免这样的瞎忙,特为大家分享一个小的故事。 在一个山谷的禅房里有一位老禅师,他发现自己有一个徒弟非常勤奋,不管是去化缘,还是去厨房洗菜,这个徒弟从…

解决:org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 原因1:启动 broker 方式不对。 我完全是按照官方文档操作的,在网上看到说这一步是错误的启动 broker 方式&#…

tomcat需要设置环境变量吗

tomcat是一款轻量级web应用服务器,安装的时候我们都是直接解压zip包,然后在bin目录下双击startup.bat就可以启动了(当然,前提是本地要安装jdk并配置JAVA_HOME环境变量) 所以我一直认为tomcat是不用配置环境变量的 但是…

Intro OpenCL Tutorial

Benedict R. Gaster, AMD Architect, OpenCL™ OpenCL™ is a young technology, and, while a specification has been published (www.khronos.org/registry/cl/), there are currently few documents that provide a basic introduction with examples. This article helps…

雷林鹏分享:codeigniter框架文件上传处理

CodeIgniter 框架input表单的重新填充,主要是针对text、radio、checkbox、select等input表单,那么对于文件上传表单file该如何处理呢? 自己的处理方式: //设置文件上传属性 $webroot $_SERVER[DOCUMENT_ROOT]; $time time(); $year date(…

jQuery基本使用

一.what 1).一个优秀的JS函数库; 2).中大型WEB项目开发的首选; 3).使用了jQuery的网站超过90%; 4).http://jquery.com/; 二.why(即jq的好处) html元素选取(选择器)&#…