java annotation 获取属性

自定义Annotation

1.声明一个annotation,类型是@interface

//声明注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ValueBind {
    enum fieIdType {
        STRING, INT
    };

    fieIdType type() default fieIdType.STRING;// 为属性提供一个默认值

    String value() default "sandy";

}

@Target 表示注解用在什么位置,我这里用在属性上面,可用ElementType枚举类型主要有:

    TYPE : 类、接口或enum声明

    FIELD: 域(属性)声明

METHOD: 方法声明

PARAMETER: 参数声明

CONSTRUCTOR: 构造方法声明

LOCAL_VARIABLE:局部变量声明

ANNOTATION_TYPE:注释类型声明

PACKAGE: 包声明

@Retention 表示需要在什么级别保存该注解信息。可用RetentionPolicy枚举类型主要有:

SOURCE: 注解将被编译器丢弃(编译的时候删除掉)。

CLASS  :  注解在class文件中可用。但会被VM丢弃。

RUNTIME: VM将在运行时也保存注解(一般都是用这个,运行时通过反射读取注解)

@Documented:  将此注解包含在Javadoc中

2.新建一个需要使用Annotation的类

import test.annotation.ValueBind.fieIdType;

public class Student {
    /** 因为我为String类型在annotation文件中已经添加了默认值,所以这里可以不用值 **/
    @ValueBind
    public String name;
    /** 因为这的默认值是String类型,而这用了int类型 ,所以我这里重新设了值  **/
    @ValueBind(type = fieIdType.INT, value = "15")
    public int age;

    public String toString() {
        return String.format("Student[name=%s,age=%d]", name, age);
    }
}

3.通过反射机制,得到Annotation的值

public static void main(String[] args) throws Exception {
        //通过反射得到类
        Object obj = Class.forName("test.annotation.Student").newInstance();
        // 得到类的属性列表
        Field[] fields = obj.getClass().getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            // 这个是检查类中属性是否含有注解
            if (fields[i].isAnnotationPresent(ValueBind.class)) {
                // 获取注解
                ValueBind annotation = fields[i].getAnnotation(ValueBind.class);
                String type = annotation.type().toString();
                if (type.equals("INT")) {
                    fields[i].setInt(obj, Integer.parseInt(annotation.value()));
                } else if (type.equals("STRING")) {
                    fields[i].set(obj, annotation.value());
                }
            }
        }
        System.out.println(((Student) obj).toString());
    }

文笔不好,看不看得懂,随意

参考:

http://blog.csdn.net/lifetragedy/article/details/7394910

http://www.cnblogs.com/linjiqin/archive/2011/02/16/1956426.html

java annotation 获取属性

时间: 2024-10-10 08:59:58

java annotation 获取属性的相关文章

Java实现获取属性文件的参数值

Java实现获取属性文件的参数值 1,属性文件内容(analysis.properties),路径必须在:src根目录下: #client data path analysis.client.data.path = D://analysis/data/ #server data path analysis.server.data.path = /home/iq126/xyzqiq126/file_tang/ 2,获取属性文件的方法: /** * @Title: getPropertiesValu

java中获取系统属性以及环境变量

java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户定义的信息传递给 Java 进程.环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的.在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写.由于这些原因,环境变量更可能有意料不到的副作用.最好在可能的地方使用系统属性.环境变

JAVA中的反射只获取属性的get方法

JAVA中的反射只获取属性的get方法 在开发过程中,我们经常需要获取类中某些属性的get方法,此时我们需要使用到反射,例如,我们在获得一个对象后,需要知道该对象的哪些属性有值,哪些没有值,方便我们后面的处理. 譬如在我们拼SQL语句时,就需要知道哪些字段为空或为NULL,此时我们在拼语句的时候需要剔除掉,若是我们采用一般的判断的办法,则会很复杂(需要处理好SQL中的AND关键字的有无 ),当然,我们也有另外的解决办法(例如将非空的键和值存入map中,再将map存入list集合中,然后循环集合做

Java反射《三》获取属性

1 package com.study.reflect; 2 3 import java.lang.reflect.Field; 4 /** 5 * 反射,获取属性 6 * @ClassName: FieldDemo 7 * @author BlueLake 8 * @date 2015年9月10日 下午4:21:29 9 */ 10 public class FieldDemo { 11 12 public static void main(String[] args) throws NoSu

Java反射获取对象VO的属性值(通过Getter方法)

有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个Excel导出的工具类,导出的批量数据是以List类型传入的,List里的对象自然每次都不同,这取决于需要导出什么信息. 为了使用方便,将对象的属性名与属性值存于Map当中,使用时就可以直接遍历Map了. 此次的思路是通过反射和Getter方法取得值,然后记录在一个Map当中. Kick start

java正则表达式获取指定HTML标签的指定属性值

package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @use 获取指定HTML标签的指定属性的值 * @FullName com.mmq.regex.MatchHtmlElementAttrValue.java </br> * @JDK 1.6.0 </b

java 反射机制--根据属性名获取属性值

1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 [java] view plain copy /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getField(fieldName

1.2.4 Java Annotation 提要

(本文是介绍依赖注入容器Spring和分析JUnit源码的准备知识) Java Annotation(标注) java.lang.annotation.Annotation是全部Java标注的父接口.它除了override/改写Object的equals(Object).hashCode()和toString()外,仅有一个方法 Class<? extends Annotation> annotationType() 返回本标注的的类型. JDK中定义的标注java.lang.Override

JAVA学习--反射属性操作

1 //获取对应的运行时类的属性 2 @Test 3 public void test1(){ 4 Class clazz = Person.class; 5 //1.getFields():只能获取到运行时类中及其父类中声明为public的属性 6 Field[] fields = clazz.getFields(); 7 8 for(int i = 0;i < fields.length;i++){ 9 System.out.println(fields[i]); 10 } 11 Syste