真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java注解處理器的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)Java注解處理器的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比保山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式保山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋保山地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

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

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

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

Class:類定義

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

Field:累的成員變量定義

Method:類的方法定義

Package:類的包定義

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

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

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

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

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

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

一個(gè)簡(jiǎ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)商編號(hào)
   * @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號(hào)紅富士大廈")
	  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)商編號(hào):"+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)商編號(hào):1 供應(yīng)商名稱:陜西紅富士集團(tuán) 供應(yīng)商地址:陜西省西安市延安路89號(hào)紅富士大廈

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

Java注解處理器的示例分析

關(guān)于“Java注解處理器的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


當(dāng)前名稱:Java注解處理器的示例分析
當(dāng)前鏈接:http://weahome.cn/article/ggseoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部