Java注解Annotation学习笔记
一、自定义注解
//注解中的成员变量非常像定义接口public @interface MyAnnotation {//不带有默认值String name();//带有默认值int age() default 20;}
- getAnnotion(Class<T> annotationClass) 返回该元素上存在的,指定类型的注解,如果没有返回null
- Annotation[] getAnnotations() 返回该元素上所有的注解。
- boolean isAnnotationPersent(Class<? extends Annotation> annotationClass) 判断该院上上是否含有制定类型的注释。
二、元注解
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface ValueBind {filedType type();String value() default "SUSU";enum filedType {STRING, INT}}
- @Retention有如下几种取值:

- 其中通常都是RetentionPolicy.RUNTIME

三、Demo
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ValueBind {filedType type();String value() default "SUSU";enum filedType {STRING, INT}}
public class Person implements Serializable {private String name;private int age;public String getName() {return name;}@ValueBind(type = ValueBind.filedType.STRING, value = "LCF")public void setName(String name) {this.name = name;}public int getAge() {return age;}@ValueBind(type = ValueBind.filedType.INT, value = "21")public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}}
import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws Exception {Object person = Class.forName("Person").newInstance();//以下获取的是:类的注解// Annotation[] annotations = person.getClass().getAnnotations();Method[] methods = person.getClass().getMethods();for (Method method : methods) {//如果该方法上面具有ValueBind这个注解if (method.isAnnotationPresent(ValueBind.class)) {//通过这个注解可以获取到注解中定义的ValueBind annotation = method.getAnnotation(ValueBind.class);if (annotation.type().equals(ValueBind.filedType.STRING)) {method.invoke(person, annotation.value());} else {method.invoke(person, Integer.parseInt(annotation.value()));}}}System.out.println(person);}}
Java注解Annotation学习笔记的更多相关文章
- Java注解Annotation学习
学习注解Annotation的原理,这篇讲的不错:http://blog.csdn.net/lylwo317/article/details/52163304 先自定义一个运行时注解 @Target( ...
- Java 注解(Annoation)学习笔记
1 Junit中的@Test为例: 1.1 用注解(@Test)前 private boolean isTestMethod(Method m) { return m.getParameterType ...
- 深入学习JAVA注解-Annotation(学习过程)
JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...
- 深入JAVA注解-Annotation(学习过程)
JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- 《深入理解Java虚拟机》学习笔记
<深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...
- Java注解和反射笔记
Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些 ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- Maven mvn install 本地jar添加到maven仓库中
最近在使用支付宝.财付通这样的第三方支付,在使用支付宝过程中需要引入官方SDK方便开发,使用以下命令来将本地的jar装载到maven仓库中. 这里有几点需要注意点,我使用Windows10时,使用po ...
- Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启
中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...
- 愿Linux红帽旋风吹得更加猛烈吧!
大约在2000年年初.<中国青年出版社>准备从台湾引进图书(中译本)"Linux红帽旋风"(美国Robert Young),让我为该书写一个前言. 该书作者罗伯特.扬是 ...
- Spring高级装配(一) profile
Spring高级装配要学习的内容包括: Spring profile 条件化的bean声明 自动装配与歧义性 bean的作用域 Spring表达式语言 以上属于高级一点的bean装配技术,如果你没有啥 ...
- ContentType和@ResponseBody
ContentType 为 application/x-www-form-urlencoded (表单)时,入参前不需要加@ResponseBody: ContentType 为 applicatio ...
- Java编程的逻辑 (44) - 剖析TreeSet
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- sql 拼接同列的值
sql中有时需要将列的值转成行的形式,比如下面的数据,具有相同Path的ZumenID有哪一些,该怎么做呢? 常见的做法可以参见这篇文章http://www.cnblogs.com/xiashengw ...
- 【oneday_onepage】——China's Internet users grow to 591 million
July 17, 2013, 6:29 AM — China's Internet populace grew to 591 million by the end of June, as more n ...
- 【转】MySQL分库分表数据迁移工具的设计与实现
一.背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分表.无论是进行水平拆分还是垂直拆分,第一步必然需要数据迁移与同步.由此可以衍生出一系列 ...
- [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
导入命令 sqoop import --connect jdbc:mysql://192.168.200.250:3306/sqoop --table widgets --hbase-create-t ...