关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是

总结了两种方式,记录如下:

第一种:结合反射进行属性注入,代码如下:

1、定义一个注解:

package com.xxx.ann.simple;

import java.lang.annotation.*;

/**

* 1.注解的定义:Java文件叫做Annotation,用@interface表示。

*

* 2.元注解:@interface上面按需要注解上一些东西,包括@Retention、@Target、@Document、@Inherited四种。

*

* 3.注解的保留策略:

*

*   @Retention(RetentionPolicy.SOURCE) // 注解仅存在于源码中,在class字节码文件中不包含

*

*   @Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得

*

*   @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

*

* 4.注解的作用目标:

*

*   @Target(ElementType.TYPE) // 接口、类、枚举、注解

*

*   @Target(ElementType.FIELD) // 字段、枚举的常量

*

*   @Target(ElementType.METHOD) // 方法

*

*   @Target(ElementType.PARAMETER) // 方法参数

*

*   @Target(ElementType.CONSTRUCTOR) // 构造函数

*

*   @Target(ElementType.LOCAL_VARIABLE) // 局部变量

*

*   @Target(ElementType.ANNOTATION_TYPE) // 注解

*

*   @Target(ElementType.PACKAGE) // 包

*

* 5.注解包含在javadoc中:

*

*   @Documented

*

* 6.注解可以被继承:

*

*   @Inherited

*

* 7.注解解析器:用来解析自定义注解。

*/

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface MyAnno {

//注解的属性

String name() default "rose";

String value() default "jack";

}

2、用于属性:

/**

* 一个属性中使用了自定义注解的对象

*/

public class Person {

@MyAnno(name="tom")

private String name;

private int age;

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;

}

}

3、测试类与注解值得获取:

/**

* 测试类

* @param

*/

public class TestClass {

/**

* 主方法

* @param args

*/

public static void main(String[] args) {

Person person = getPerson(Person.class);

System.out.println(person.getName());

}

/**

* 通过反射获取注解的值

* @param clz

* @return

*/

public static Person getPerson(Class clz){

Person person =null;

try {

person = (Person)clz.newInstance();

//获取属性

Field[] fields = clz.getDeclaredFields();

for(Field field : fields){

//是否被特定注解修饰

boolean fieldHasAnno = field.isAnnotationPresent(MyAnno.class);

if(fieldHasAnno){

MyAnno fieldAnno = field.getAnnotation(MyAnno.class);

//注入注解属性

String name = fieldAnno.name();

person.setName(name);

}

}

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return person;

}

private T obj;

public T getObj(){

return obj;

}

public TestClass(T obj) {

this.obj = obj;

}

}

4、执行结果,是注解中的name属性的值,测试完成。

tom

java属性注解_【java自定义注解1】java自定义注解-属性相关推荐

  1. java 注解_通俗易懂的讲解下Java注解

    对于Java注解,我咨询过一些身边的人,很多人表示: 知道怎么用,不熟悉 不知道你是不是这样?在我没有系统性的学习一边注解的时候,我也是如此,在我花时间学习过注解之后,我觉得,对于注解,最重要的在于理 ...

  2. 怎么实现注解_通透!一口气搞懂注解到底怎么用

    日志脱敏场景简介 在日志里我们的日志一般打印的是 model 的 Json string,比如有以下 model 类 public class Request { /** * 用户姓名 */ priv ...

  3. java 并行流水线_在新流水线使用 Java 应用演示

    项目中.您可以在 GitHub 找到本项目并获取本文中所提到的所有代码文件. 创建 Spring Boot 项目 首先,我们建立一个基于 Spring Boot 的 Web 应用.填写完项目信息后,在 ...

  4. @param注解_启用 parameters 编译选项简化 mybatis @Param 注解重复问题

    在使用 mybatis 查询的时候, 只需要定义一个查询接口, mybatis 会为我们注入注解实现或是 xml 实现. 但当我们需要传递参数时, 通常需要 @Param 来定义一个名称, 但经常的, ...

  5. java核心面试_不正确的核心Java面试答案

    java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...

  6. 手把手教安装java开发环境_手把手教你配置java开发环境-java环境变量设置

    在本篇中将为大家介绍如何在windows下搭建Java的开发环境. 话不多说,直接转入正题.下载java开发工具包JDK 下载地址:http://www.oracle.com/technetwork/ ...

  7. java rest 序列化_一文看懂Java序列化

    一文看懂Java序列化 简介 首先我们看一下wiki上面对于序列化的解释. 序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓 ...

  8. java多线程 模型_一篇文章读懂Java多线程模型

    要真正了解Java的多线程,我们还要从进程和线程的概念说起 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期 ...

  9. java 数据对_数据表与简单java类(一对多)

    emp表:empno,ename,job,sal,comm,mgr,deptno dept表:deptno,dname,loc 要求可以通过程序描述出如下对应关系 一个部门有多个部员,并且可以输出一个 ...

  10. java异常处理框架_深入探索 高效的Java异常处理框架(1)

    摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用 ...

最新文章

  1. 51CTO,什么情况?
  2. 网易=4 ×(新浪 + 搜狐)
  3. java hibernate 分页查询_4 Hibernate HQL查询,分页查询
  4. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
  5. 一图看懂边缘计算整体架构
  6. 请查收~微信春节聊天彩蛋 微信群的卖萌小神器
  7. 几种简单的负载均衡算法及其 Java 代码实现
  8. 数字货币交易系统_符合数字货币市场的量化交易系统
  9. 使用windows 7有感
  10. 抖音敏感词归类,抖音都有哪些违规词,违规行为。
  11. 可编程、变频调速与触摸屏实验实训装置
  12. 高德h5地图api接口_概述-URI API | 高德地图API
  13. Verilog HDL简介
  14. WHAT、HOW、WHY
  15. jzojNOIP2014模拟 8.14总结
  16. 你应该会喜欢的5个自定义 Hook
  17. Scala中Either两个子类Left/Right
  18. mac与mac传输文件_Mac上传输的最佳选择
  19. 论企业上云的三大阻力!
  20. 异常处理——栈解旋(unwinding)

热门文章

  1. Game Theory: 公平博弈
  2. mac mtu测试_从Mac OS X的命令行设置MTU大小 | MOS86
  3. ECC有限域椭圆曲线加密算法实例---构建椭圆曲线的循环群,利用椭圆曲线离散对数问题实现信息的加密解密,签名和验证
  4. Android输入法与页面布局无缝切换
  5. 华云大咖说 | 一体机+云终端模式,何以打造媲美PC的桌面云极致体验?
  6. C++包扩展_键盘中国免费提供下载:雅马哈PSRSX900、SX700第三版1.3G海量整合扩展音色、节奏包(含音频节奏)...
  7. 易飞安装在VMware虚拟机方法
  8. 树莓派搭建服务器java,使用树莓派架设Minecraft服务器端
  9. 《第一行代码》第三版笔记
  10. 新中国成立以来的历次暴富机会