欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java注解處理器簡單實例

 更新時間:2018年01月03日 11:04:23   作者:Leesire  
這篇文章主要介紹了Java注解處理器簡單實例,具有一定借鑒價值,需要的朋友可以參考下

如果沒有用來讀取注解的方法和工作,那么注解也就不會比注釋更有用處了。使用注解的過程中,很重要的一部分就是創(chuàng)建于使用注解處理器。JavaSE5擴(kuò)展了反射機(jī)制的API,以幫助程序員快速的構(gòu)造自定義注解處理器。

注解處理器類庫(java.lang.reflect.AnnotatedElement):

Java使用Annotation接口來代表程序元素前面的注解,該接口是所有Annotation類型的父接口。除此之外,Java在java.lang.reflect包下新增了AnnotatedElement接口,該接口代表程序中可以接受注解的程序元素,該接口主要有如下幾個實現(xiàn)類:

Class:類定義

Constructor:構(gòu)造器定義

Field:累的成員變量定義

Method:類的方法定義

Package:類的包定義

java.lang.reflect包下主要包含一些實現(xiàn)反射功能的工具類,實際上,java.lang.reflect包所有提供的反射API擴(kuò)充了讀取運行時Annotation信息的能力。當(dāng)一個Annotation類型被定義為運行時的Annotation后,該注解才能是運行時可見,當(dāng)class文件被裝載時被保存在class文件中的Annotation才會被虛擬機(jī)讀取。

AnnotatedElement接口是所有程序元素(Class、Method和Constructor)的父接口,所以程序通過反射獲取了某個類的AnnotatedElement對象之后,程序就可以調(diào)用該對象的如下四個個方法來訪問Annotation信息:

方法1:<TextendsAnnotation>TgetAnnotation(Class<T>annotationClass):返回改程序元素上存在的、指定類型的注解,如果該類型注解不存在,則返回null。

方法2:Annotation[]getAnnotations():返回該程序元素上存在的所有注解。

方法3:booleanisAnnotationPresent(Class<?extendsAnnotation>annotationClass):判斷該程序元素上是否包含指定類型的注解,存在則返回true,否則返回false.

方法4:Annotation[]getDeclaredAnnotations():返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會對其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。

一個簡單的注解處理器:

/***********注解聲明***************/
/**
 * 水果名稱注解
 * @author peida
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
	String value() default "";
}
/**
 * 水果顏色注解
 * @author peida
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
	/**
   * 顏色枚舉
   * @author peida
   *
   */
	public enum Color{
		BULE,RED,GREEN
	}
	;
	/**
   * 顏色屬性
   * @return
   */
	Color fruitColor() default Color.GREEN;
}
/**
 * 水果供應(yīng)者注解
 * @author peida
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
	/**
   * 供應(yīng)商編號
   * @return
   */
	public int id() default -1;
	/**
   * 供應(yīng)商名稱
   * @return
   */
	public String name() default "";
	/**
   * 供應(yīng)商地址
   * @return
   */
	public String address() default "";
}
/***********注解使用***************/
public class Apple {
	@FruitName("Apple")
	  private String appleName;
	@FruitColor(fruitColor=Color.RED)
	  private String appleColor;
	@FruitProvider(id=1,name="陜西紅富士集團(tuán)",address="陜西省西安市延安路89號紅富士大廈")
	  private String appleProvider;
	public void setAppleColor(String appleColor) {
		this.appleColor = appleColor;
	}
	public String getAppleColor() {
		return appleColor;
	}
	public void setAppleName(String appleName) {
		this.appleName = appleName;
	}
	public String getAppleName() {
		return appleName;
	}
	public void setAppleProvider(String appleProvider) {
		this.appleProvider = appleProvider;
	}
	public String getAppleProvider() {
		return appleProvider;
	}
	public void displayName(){
		System.out.println("水果的名字是:蘋果");
	}
}
/***********注解處理器***************/
public class FruitInfoUtil {
	public static void getFruitInfo(Class<?> clazz){
		String strFruitName=" 水果名稱:";
		String strFruitColor=" 水果顏色:";
		String strFruitProvicer="供應(yīng)商信息:";
		Field[] fields = clazz.getDeclaredFields();
		for (Field field :fields){
			if(field.isAnnotationPresent(FruitName.class)){
				FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);
				strFruitName=strFruitName+fruitName.value();
				System.out.println(strFruitName);
			} else if(field.isAnnotationPresent(FruitColor.class)){
				FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);
				strFruitColor=strFruitColor+fruitColor.fruitColor().toString();
				System.out.println(strFruitColor);
			} else if(field.isAnnotationPresent(FruitProvider.class)){
				FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);
				strFruitProvicer=" 供應(yīng)商編號:"+fruitProvider.id()+" 供應(yīng)商名稱:"+fruitProvider.name()+" 供應(yīng)商地址:"+fruitProvider.address();
				System.out.println(strFruitProvicer);
			}
		}
	}
}
/***********輸出結(jié)果***************/
public class FruitRun {
	/**
   * @param args
   */
	public static void main(String[] args) {
		FruitInfoUtil.getFruitInfo(Apple.class);
	}
}
====================================
 水果名稱:Apple
 水果顏色:RED
 供應(yīng)商編號:1 供應(yīng)商名稱:陜西紅富士集團(tuán) 供應(yīng)商地址:陜西省西安市延安路89號紅富士大廈

Java注解的基礎(chǔ)知識點(見下面導(dǎo)圖)基本都過了一遍,下一篇我們通過設(shè)計一個基于注解的簡單的ORM框架,來綜合應(yīng)用和進(jìn)一步加深對注解的各個知識點的理解和運用。

總結(jié)

以上就是本文關(guān)于Java注解處理器簡單實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • java實現(xiàn)單機(jī)版五子棋小游戲

    java實現(xiàn)單機(jī)版五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)單機(jī)版五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Java集合類之Map集合的特點及使用詳解

    Java集合類之Map集合的特點及使用詳解

    這篇文章主要為大家詳細(xì)介紹一下Java集合類中Map的特點及使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-08-08
  • Spring5.2.x 源碼本地環(huán)境搭建的方法步驟

    Spring5.2.x 源碼本地環(huán)境搭建的方法步驟

    這篇文章主要介紹了Spring5.2.x 源碼本地環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字

    淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字

    下面小編就為大家?guī)硪黄獪\談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • IDEA 2020.1.2 安裝教程附破解教程詳解

    IDEA 2020.1.2 安裝教程附破解教程詳解

    這篇文章主要介紹了IDEA 2020.1.2 安裝教程附帶破解教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • JavaWeb開發(fā)入門第一篇必備知識講解

    JavaWeb開發(fā)入門第一篇必備知識講解

    JavaWeb開發(fā)入門第一篇主要內(nèi)容介紹的是必備知識、基礎(chǔ)知識、搭建JavaWeb應(yīng)用開發(fā)環(huán)境,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java設(shè)計模式之單例模式

    Java設(shè)計模式之單例模式

    這篇文章主要給大家介紹了關(guān)于Java單例模式,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • java中TreeMap集合的常用方法詳解

    java中TreeMap集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于java中TreeMap集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • 開源的Java圖片處理庫實例詳解

    開源的Java圖片處理庫實例詳解

    Java?圖片處理庫提供了豐富的功能,用于處理和增強(qiáng)圖像,在Java生態(tài)系統(tǒng)中,有幾個流行的開源庫可以用于圖片處理,這些庫提供了豐富的功能,如圖像縮放、裁剪、顏色調(diào)整、格式轉(zhuǎn)換等,本文介紹開源的Java圖片處理庫介紹,感興趣的朋友一起看看吧
    2024-03-03
  • Java?Swing實現(xiàn)記事本頁面

    Java?Swing實現(xiàn)記事本頁面

    這篇文章主要為大家詳細(xì)介紹了Java?Swing實現(xiàn)記事本頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論