`
sha1064616837
  • 浏览: 40405 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

自定义annotation

阅读更多
对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。
下面这个例子 主要用到了
1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解
2.简单的反射
3.枚举
详细代码:
1.定义一个是可编辑还是可读的枚举类,可以用Boolean实现,但是枚举以后可以扩展到更多的值,枚举,如果不能像性别只有男、女这么确定,建议加一个“未知”,留作以后扩展
package com.sha.annotation;

public enum EditEnum {
	UNKNOW("未知",0),
	WRITE("可写",1),
	READ("可读",2);
	/**
	 * 中文描述
	 */
	private String desc;
	/**
	 * 自定义序号
	 */
	private int index;
	
	private EditEnum(String desc, int index) {
		this.desc = desc;
		this.index = index;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public int getIndex() {
		return index;
	}
	public void setIndex(int index) {
		this.index = index;
	}
}

2.自定义一个annotation,属性为EditEnum,默认可编辑,因为可编辑的属性占多数
package com.sha.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited//允许子类继承父类的注解
@Documented//在生成javadoc文档的时候将该Annotation也写入到文档中。
@Target({ElementType.FIELD})//该自定义annotation只能用在子属性上
@Retention(RetentionPolicy.RUNTIME) //注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,所以他们可以用反射的方式读取
public @interface Editable {
	/**
	 * 默认可编辑
	 * @return
	 */
	public EditEnum value() default EditEnum.WRITE;
}

3.定义一个用户类,用Editable 来标识属性是否可编辑
package com.sha.annotation;

public class Operator{

	/**
	 * 用户ID,只可读
	 */
	@Editable(value=EditEnum.READ)
	private int id;
	
	/**
	 * 用户姓名,只可读
	 */
	@Editable(value=EditEnum.READ)
	private String name;
	
	/**
	 * 用户真实姓名,可编辑
	 */
	@Editable
	private String trueName;
	
	/**
	 * 用户密码可编辑
	 */
	@Editable
	private String password;
	
	/**
	 * 用户电话号码,可编辑
	 */
	@Editable
	private String phone;

	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 String getTrueName() {
		return trueName;
	}

	public void setTrueName(String trueName) {
		this.trueName = trueName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}
}

4.通过反射获取各个Operator子属性的可编辑属性
package com.sha.annotation;

import java.lang.reflect.Field;

public class EditTest {
	public static void main(String[] args) {
		Operator op = new Operator(); 
		Class<?>  ed = op.getClass();
		Field[] fields = ed.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) 
		{
			if(fields[i].isAnnotationPresent(Editable.class))
			{
				Editable flag = fields[i].getAnnotation(Editable.class);
				System.out.println(fields[i].getName()+"=="+flag.value().name()+"=="+flag.value().getIndex()+":"+flag.value().getDesc());
			}
		}
	}
}

Java的注解是个好东西,Java反射是个好东西。所以好东西需要保留。
分享到:
评论

相关推荐

    自定义Annotation例子

    自定义Annotation允许开发者创建自己的注解类型,以满足特定的需求或规范,例如记录代码元信息、实现代码生成、运行时检查等。下面我们将深入探讨自定义Annotation的例子及其相关知识点。 首先,了解如何定义一个...

    2个案例 自定义annotation进行查询对象封装 itext 打印案例

    在IT行业中,自定义注解(Annotation)是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,增强了代码的可读性和可维护性。这些元数据可以被编译器或运行时环境用来执行特定的任务,例如代码分析、...

    自定义Annotation注解

    本教程将通过一个简单的自定义Annotation注解示例——`CustomAnnotationDemo`,帮助新手了解如何创建和使用自定义注解。 首先,让我们看看如何定义一个自定义注解。在Java中,注解的定义使用`@interface`关键字。...

    Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx

    Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等 在实际的开发项目中,一个对外裸露的接口往往会濒临无数次哀求,我们来说明一下幂等的概念:随意多次执行所产生的影响均与一次执行的影响相同。根据这...

    自定义的Annotation

    总结一下,自定义Annotation的关键步骤包括:创建一个遵循`MKAnnotation`协议的类,重写`mapView(_:viewFor:)`以定制视图,处理点击事件,以及将Annotation添加到地图上。通过这些步骤,开发者可以自由地在地图上...

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    自定义annotationProcessor

    在本主题中,我们将深入探讨如何创建和使用自定义的`annotationProcessor`,以及它在IDEA中的应用。 首先,让我们了解什么是`annotationProcessor`。`annotationProcessor`,也称为注解处理器,是在Java编译过程中...

    Spring Boot自定义Annotation实现接口自动幂.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    Springboot+redis+Interceptor+自定义annotation实现接口自动幂等

    【接口幂等性概念】 接口幂等性是软件设计中的一个重要原则,它指的是一个接口被多...Spring Boot结合Redis和自定义Interceptor,能够有效地确保接口幂等性,防止重复处理和数据不一致,从而提高系统的稳定性和可靠性。

    Annotation技术

    自定义Annotation实际上自动继承了`java.lang.annotation.Annotation`接口,但不能继承其他Annotation类型或接口。这使得Annotation成为一种单继承的类型。 总之,Annotation技术是Java编程中的一个强大工具,它...

    Spring MVC Annotation验证的方法

    本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和自定义 Annotation 验证。 一、Spring MVCAnnotation 验证简介 Spring MVC 框架提供了多种Annotation来实现验证,...

    Java实战篇:设计自己的Annotation

    本文将重点介绍Java 1.5及以后版本中内置的三种常用注解类型及其应用方式,并进一步探讨如何自定义Annotation。 **1.1 @Override 注解** - **定义**:`@Override`注解用于标记重写(override)父类的方法。它只...

    重难点之JavaAnnotation手册.pdf

    通过自定义Annotation和对应的处理器,开发者可以构建出更智能、更安全的工具链,甚至可以替代一些传统的代码生成工具,如XDoclet。了解和熟练掌握Annotation的使用,对于提升Java开发效率和代码质量至关重要。

    JavaAnnotation手册.pdf

    2. 自定义Annotation:自定义Annotation需要定义一个接口,这个接口就是Annotation类型。通过定义成员变量(通常带有默认值),可以为Annotation添加特定的元数据。自定义Annotation可以通过`@interface`关键字创建...

    java8源码-APTDemo:自定义AnnotationProcessor处理自己的Annotation

    @Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其值如下: /**接口、类、枚举、注解**/ ElementType.TYPE /**字段、枚举的常量**/...

    JavaAnnotation手册[借鉴].pdf

    自定义Annotation通常需要与Annotation处理器配合,如Java的Apt工具,它可以扫描源代码,根据Annotation执行相应操作,例如验证非空约束。 四、Annotation的应用场景 - **编译时检查**:如`@NonNull`可以提示...

    Annotation使用手册

    自定义 Annotation 的创建涉及到定义 Annotation 类型和实际使用 Annotation。定义 Annotation 类型时,使用 `@interface` 关键字: ```java public @interface MyAnnotation { String value() default ""; } ``` ...

    Annotation手册

    5. **自定义Annotation**:从Java 6.0起,开发者可以创建自己的Annotation类型,定义特定的元信息。这使得开发人员能够创建特定于应用程序的Annotation,用于各种目的,如验证、持久化、事务管理等。 6. **...

Global site tag (gtag.js) - Google Analytics