java注解编程_Java注解编程原理

一、先了解以下4个元注解

@Documented

具体来说是生成说明文档时把类的解释添加进去。

@Inherited 允许子类继承父类中的注解

@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中

public enum ElementType {

TYPE,  //给类(型)注解

FIELD, //给字段注解,不要忘了,字段可以是对象

METHOD, //给方法注解

PARAMETER, //给参数注解

CONSTRUCTOR, //给构造方法注解

LOCAL_VARIABLE, //给局部变量注解

ANNOTATION_TYPE,//给注解注解(这貌似把自己不当类来看)

PACKAGE, //给包注解

TYPE_PARAMETER, //不知道,等知道了我再写在这里

TYPE_USE //这个也不知道

}

@Retention  表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中

public enum RetentionPolicy {

SOURCE, //源码状态运行,

CLASS, //编译类文件时运行

RUNTIME //运行时运行

}

二、再看一个Demo

注解定义

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 UserAnnotation {

public int id() default 0;

public String name() default "";

public int age() default 18;

public String gender() default "M";

}

public class User {

int id;

String name;

int age;

String gender;

public User(int id, String name, int age, String gender) {

this.id = id;

this.name = name;

this.age = age;

this.gender = gender;

}

public int getId() {

return id;

}

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;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

}

import java.lang.annotation.ElementType;

import java.lang.annotation.Target;

import java.lang.reflect.Field;

public class TestMain {

@UserAnnotation(age = 20, gender = "F", id = 2014, name = "zhangsan")//注解的使用

public Object obj;

public static void main(String[] args) throws Exception {

Field objField = TestMain.class.getField("obj");

UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);//得到注解,起到了标记的作用

System.out.println(ua.age() + "," + ua.gender() + "," + ua.id() + "," + ua.name());

//***进一步操作的话,假设Object要指向一个User类,那么可以讲注解的值给他

TestMain tm = new TestMain();

objField.set(tm, new User(ua.age(), ua.gender(), ua.id(), ua.name())); //不错吧,将自己的信息送给obj,起到了附加信息的作用

//-----------请自由遐想吧~~,下面来说说注解怎么能获得注解自己的注解-------------

Target t = ua.annotationType().getAnnotation(Target.class);

ElementType[] values = t.value();

//~~~~~~~~~~~~~~完了,再一次自由遐想吧~~~~~~~~~~~~~~

String words="疯狂";

System.out.println(words);

}

}

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

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

相关文章

Redis面试复习大纲在手面试不慌,讲的明明白白!

前言 面试时间将近两个小时(期间等待二面面试官来面我的时候等了半个多小时)面试官问的东西很多,还挖了好几个坑,一个技术点套着一个技术点的问,一定要做好万全的准备。问了一些基本层面上的技术点都答出来了&#xf…

python sendline_python Pexpect模块的使用

Pexpect简介在讲解Pexpect之前,我们需要先了解一下Expect这个脚本语言,它是由TCL语言实现的,主要用于人机交互式对话的自动化控制,可以用来完成ssh、ftp、telnet等命令行程序的自动化交互。Pexpect其实就是一个用Python语言实现的…

RocketMQ消息丢失场景及解决办法,已拿offer入职

前言 当前我们都会说SpringBoot是Spring框架对“约定优先于配置理念的最佳实践的产物,一个典型的SpringBoot应用本质上其实就是一个基于Spring框架的应用,而如果大家对Spring框架已经了如指掌,那么,在我们一步步揭开SpringBoot微…

java抓rtp包_Wireshark抓取RTP包,还原语音

最近在做基于SIP的VoIP通信研究,使用Wireshark软件可以对网络流量进行抓包。VoIP使用RTP协议对语音数据进行传输,语音载荷都封装在RTP包里面。要对传输中的语音进行截获和还原,需要通过Wireshark对RTP包进行分析和解码。该过程如下&#xff1…

RocketMQ消费者是如何获取消息的?转疯了!

前言 前两天,我收到了蚂蚁金服的offer,从朋友的内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了offer。 第1章:Dubbo的简史、后续的规划和整体架构大图 …

java if在内存中_java如何将对象暂存到内存中?

展开全部form表单提交文件,建议用62616964757a686964616fe59b9ee7ad9431333264623862smartupload上传,暂存在web服务器目录下,然后稍微一下下面的代码,ftp上传后,删除暂存文件,okimport java.io.File;impor…

K8S+Docker理论与实践深度集成

前言: 这篇文章主要介绍了26道Spring经典面试题总结(附带答案)的相关资料,小编在网上看到的觉得挺不错的,现在分享给大家,希望对你们有所帮助。 另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大…

java 注解 方法 参数_java在注解中绑定方法参数的解决方案

我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以…

Kafka的精髓全写这本“限量笔记”里了

前言 大厂面试真题向来是求职者的最佳练兵场,华为在Java开发工程师招聘中有哪些技术性考察和倾向?那今天咱就给大家分享一下近期的华为5面面经! 注:以下所分享的华为面试问题,相关的答案我也整理出来了,且…

gcc是java的什么意思_为什么gcc支持Java而不是C#

我已经seen this question了,我想知道是否有任何技术理由可以证明gcc支持Java但不支持C#.如果我理解,Java也是一种解释性语言.如果Mono提供C#编译器和CIL的实现,为什么不能创建一个将C#转换为IL然后静态编译的gcc c#编译器?解决方法:如果编译器工具链不支持特定语言…

MongoDB数据分布不均的解决方案

前言 算法血拼:Google百度Alibaba字节Tencent网易360拼夕夕美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚石? 恰好,我这两天花了点时间,整理了些各大厂(G…

Mybatis-plus常用API全套教程

前言 前两天,我收到了蚂蚁金服的offer,从朋友的内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了offer。 正文 下文中截图来源于朋友一个pdf版本的面经,…

我的世界手动选择java_如何选中路径-我的世界怎么选择java路?我的世界怎么选择java路径 爱问知识人...

2014-06-03 11:26:47首先确定你安装了Java,如没有自行去官网下载最近版本 如果已安装,打开启动器,一般的启动器都有设置选项,在设置里选择正确的Java路径或者让启动器自行搜索 设置完毕后启动游戏~全部2014-06-03 11:26:472014-06…

Mycat和Mysql搭建高可用企业数据库集群

个人背景 如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努…

java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...

String sql”select * from reg where username”user”‘ and pass”pwd”‘”;这是一个非常糟糕的做法.这种方法要求用户名和密码都通过请求传递普通香草.而且,你有一个SQL注入攻击漏洞.利用会话,在JSP / Servlet中你有HttpSession.实际上也没有必要在使用过滤器的每个请求上…

MySQL+Tomcat+JVM,看完还怕面试官

前言 我朋友也是个写了四年Java代码的程序员,跟女友已经恋爱多年,最近突然结婚了。 他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。 我聊天时打趣他&#xff1…

java因子分析_因子分析(Factor Analysis)

1 问题之前我们考虑的训练数据中样例的个数m都远远大于其特征个数n&#xff0c;这样不管是进行回归、聚类等都没有太大的问题。然而当训练样例个数m太小&#xff0c;甚至m<多元高斯分布的参数估计公式如下&#xff1a;分别是求mean和协方差的公式&#xff0c;表示样例&#…

MySQL+多线程+Redis+算法+网络

开头 我们面试的时候 &#xff0c;经常会被问这种到问题:Spring中bean的循环依赖怎么解决&#xff1f; Spring中bean的加载过程&#xff1f; spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们&#xff0c;不知道从哪里下手&#xff0c;今天举例分析大厂的一…

python 函数进度条怎么_python输出结果刷新及进度条的实现操作

print函数python输出主要使用print函数&#xff0c;print函数介绍&#xff1a;print(*objects, sep" ", end"", filesys.stdout, flushFalse)*objects表示要打印的值&#xff0c;表示多个无名参数或需要打印的值&#xff1b;sep" "&#xff0c;对…

MySQL优化原理分析及优化方案总结

前言 今天中午收到我司安全部发了一封邮件&#xff1a;Jackson存在安全漏洞。查了一下&#xff0c;这件事并不算很新鲜了&#xff08;已经过了5天的样子&#xff09;&#xff0c;本文来聊聊吧。 说起来还蛮戏剧化&#xff1a;阿里云向Jackson官方提交了一个Jackson序列化安全…