java属性注解_【java自定义注解1】java自定义注解-属性
关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是
总结了两种方式,记录如下:
第一种:结合反射进行属性注入,代码如下:
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自定义注解-属性相关推荐
- java 注解_通俗易懂的讲解下Java注解
对于Java注解,我咨询过一些身边的人,很多人表示: 知道怎么用,不熟悉 不知道你是不是这样?在我没有系统性的学习一边注解的时候,我也是如此,在我花时间学习过注解之后,我觉得,对于注解,最重要的在于理 ...
- 怎么实现注解_通透!一口气搞懂注解到底怎么用
日志脱敏场景简介 在日志里我们的日志一般打印的是 model 的 Json string,比如有以下 model 类 public class Request { /** * 用户姓名 */ priv ...
- java 并行流水线_在新流水线使用 Java 应用演示
项目中.您可以在 GitHub 找到本项目并获取本文中所提到的所有代码文件. 创建 Spring Boot 项目 首先,我们建立一个基于 Spring Boot 的 Web 应用.填写完项目信息后,在 ...
- @param注解_启用 parameters 编译选项简化 mybatis @Param 注解重复问题
在使用 mybatis 查询的时候, 只需要定义一个查询接口, mybatis 会为我们注入注解实现或是 xml 实现. 但当我们需要传递参数时, 通常需要 @Param 来定义一个名称, 但经常的, ...
- java核心面试_不正确的核心Java面试答案
java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...
- 手把手教安装java开发环境_手把手教你配置java开发环境-java环境变量设置
在本篇中将为大家介绍如何在windows下搭建Java的开发环境. 话不多说,直接转入正题.下载java开发工具包JDK 下载地址:http://www.oracle.com/technetwork/ ...
- java rest 序列化_一文看懂Java序列化
一文看懂Java序列化 简介 首先我们看一下wiki上面对于序列化的解释. 序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓 ...
- java多线程 模型_一篇文章读懂Java多线程模型
要真正了解Java的多线程,我们还要从进程和线程的概念说起 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期 ...
- java 数据对_数据表与简单java类(一对多)
emp表:empno,ename,job,sal,comm,mgr,deptno dept表:deptno,dname,loc 要求可以通过程序描述出如下对应关系 一个部门有多个部员,并且可以输出一个 ...
- java异常处理框架_深入探索 高效的Java异常处理框架(1)
摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用 ...
最新文章
- 51CTO,什么情况?
- 网易=4 ×(新浪 + 搜狐)
- java hibernate 分页查询_4 Hibernate HQL查询,分页查询
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
- 一图看懂边缘计算整体架构
- 请查收~微信春节聊天彩蛋 微信群的卖萌小神器
- 几种简单的负载均衡算法及其 Java 代码实现
- 数字货币交易系统_符合数字货币市场的量化交易系统
- 使用windows 7有感
- 抖音敏感词归类,抖音都有哪些违规词,违规行为。
- 可编程、变频调速与触摸屏实验实训装置
- 高德h5地图api接口_概述-URI API | 高德地图API
- Verilog HDL简介
- WHAT、HOW、WHY
- jzojNOIP2014模拟 8.14总结
- 你应该会喜欢的5个自定义 Hook
- Scala中Either两个子类Left/Right
- mac与mac传输文件_Mac上传输的最佳选择
- 论企业上云的三大阻力!
- 异常处理——栈解旋(unwinding)
热门文章
- Game Theory: 公平博弈
- mac mtu测试_从Mac OS X的命令行设置MTU大小 | MOS86
- ECC有限域椭圆曲线加密算法实例---构建椭圆曲线的循环群,利用椭圆曲线离散对数问题实现信息的加密解密,签名和验证
- Android输入法与页面布局无缝切换
- 华云大咖说 | 一体机+云终端模式,何以打造媲美PC的桌面云极致体验?
- C++包扩展_键盘中国免费提供下载:雅马哈PSRSX900、SX700第三版1.3G海量整合扩展音色、节奏包(含音频节奏)...
- 易飞安装在VMware虚拟机方法
- 树莓派搭建服务器java,使用树莓派架设Minecraft服务器端
- 《第一行代码》第三版笔记
- 新中国成立以来的历次暴富机会