Java注解开发与应用案例

Java注解开发与应用案例

Annotation(注解)是JDK5.0及以后版本引入的,可以对包、类、属性、方法的描述,给被述对象打上标签,被打上标签后的类、属性、方法将被赋予特殊的“功能”;打个比喻,一个人如果学会飞,那这个人就是超人,所以如果给“人”这个对象打上了“会飞”的标签,那么这个人便成为“超人”。注解一般被框架解析和执行,新建立注解后,必须要有对应的框架解析和执行才有意义。下面举一个自定义注解例子:

 

自定义注解

  它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,下面,我们用代码来演示。

复制代码
package com.annotation.test;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitColor {

    enum Color{RED,YELLOW,WHITE}
    
    Color fruitColor() default Color.RED;
    
}
复制代码
复制代码
package com.annotation.test;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitName {

    String value() default "";
    
}
复制代码
复制代码
package com.annotation.test;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FruitProvider {

    int id() default 0;
    
    String user() default "";
    
    String address() default "";
    
}
复制代码

以上是定義的蘋果的相關信息,下面,我們開始使用上面定義的註解來進行具體的實現:

复制代码
package com.annotation.test;

import com.annotation.test.FruitColor.Color;

public class Apple {

    @FruitName(value="FuShi Apple")
    private String fruitName;
    
    @FruitColor(fruitColor=Color.RED)
    private String fruitColor;
    
    @FruitProvider(id=1,user="Tom",address="China")
    private FruitProvider provider;
}
复制代码

上面的Apple類是使用我們自己定義的註解來對類成員進行修飾。接下來,我們獲取我們的註釋信息:

复制代码
 1 package com.annotation.test;
 2 
 3 import java.lang.reflect.Field;
 4 
 5 public class Test {
 6 
 7     
 8     public static void getFruitInfo(String clas){
 9         try {
10             Class<?> cls = Class.forName(clas);
11             Field[] fields = cls.getDeclaredFields();
12             
13             for (Field field : fields) {
14                 if(field.isAnnotationPresent(FruitName.class)==true){
15                     FruitName name = field.getAnnotation(FruitName.class);
16                     System.out.println("Fruit Name:"+name.value());
17                 }
18                 if(field.isAnnotationPresent(FruitColor.class)){
19                     FruitColor color = field.getAnnotation(FruitColor.class);
20                     System.out.println("Fruit Color:"+color.fruitColor());
21                 }
22                 if(field.isAnnotationPresent(FruitProvider.class)){
23                     FruitProvider Provider = field.getAnnotation(FruitProvider.class);
24                     System.out.println("Fruit FruitProvider: ProviderID:"+Provider.id()+" Provider:"+Provider.user() +" ProviderAddress:"+Provider.address());
25                 }
26             }
27             
28             
29         } catch (ClassNotFoundException e) {
30             e.printStackTrace();
31         }
32     }
33     
34     public static void main(String[] args) {
35         getFruitInfo("com.annotation.test.Apple");
36     }
37     
38 }
复制代码

輸出結果爲:

Fruit Name:FuShi Apple
Fruit Color:RED
Fruit FruitProvider: ProviderID:1 Provider:Tom ProviderAddress:China

 

posted @ 2019-01-08 13:51  技术研究与问题解决  阅读(881)  评论(0编辑  收藏  举报