日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標:通過自定義注解 @Ignore 注解,覺得是否讀取指定類的屬性。

運行結果:

[main] INFO util.FruitInfoUtil -水果的名字為:entity.Apple

[main] INFO util.FruitInfoUtil-水果的顏色為:RED

[main] INFO util.FruitInfoUtil-水果的供應商名稱為:紅富士供應商,供應商地址為:山西紅富士產業園

[main] INFO main.MainTest- ====================[main] INFO util.FieldsUtil- fieldName:fruitColor's ignore is null

[main] INFO util.FieldsUtil - fieldName:fruitProvider's ignore is false

[main] INFO? util.FieldsUtil? - fields:

[main] INFO util.FieldsUtil -fruitColor

[main] INFO util.FieldsUtil-fruitProvider

[main] INFO util.FieldsUtil- END

import java.lang.annotation.*;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitName {

String value() default "";

}

import java.lang.annotation.*;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitColor {

public enum Color {GREND, RED, BLUE}

Color fruitColor() default Color.GREND;

}

import java.lang.annotation.*;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitProvider {

int id() default -1;

String name() default "";

String addr() default "";

}

import java.lang.annotation.*;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Ignore {

boolean ignore() default false;

}

import annotation.FruitColor;

import annotation.FruitName;

import annotation.FruitProvider;

import annotation.Ignore;

public class Apple {

@FruitName("entity.Apple")

@Ignore(ignore = true)

String fruitName;

@FruitColor(fruitColor = FruitColor.Color.RED)

// @Ignore(ignore = true)

String fruitColor;

@FruitProvider(id = 1, name = "紅富士供應商", addr = "山西紅富士產業園")

@Ignore

String fruitProvider;

public String getFruitName() {

return fruitName;

}

public void setFruitName(String fruitName) {

this.fruitName = fruitName;

}

public String getFruitColor() {

return fruitColor;

}

public void setFruitColor(String fruitColor) {

this.fruitColor = fruitColor;

}

public String getFruitProvider() {

return fruitProvider;

}

public void setFruitProvider(String fruitProvider) {

this.fruitProvider = fruitProvider;

}

public void getAppleName(){

System.out.println("水果的名稱為:蘋果。");

}

}

import annotation.FruitColor;

import annotation.FruitName;

import annotation.FruitProvider;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;

public class FruitInfoUtil {

final static Logger logger = LoggerFactory.getLogger(FruitInfoUtil.class);

public static void getAnnotationInfo(Class clazz){

Field[] fields = clazz.getDeclaredFields();

for (Field field : fields) {

if(field.isAnnotationPresent(FruitName.class)){

FruitName fruitName = field.getAnnotation(FruitName.class);

logger.info("水果的名字為:"+fruitName.value());

}

else if(field.isAnnotationPresent(FruitColor.class)) {

FruitColor fruitColor = field.getAnnotation(FruitColor.class);

logger.info("水果的顏色為:" + fruitColor.fruitColor());

}

else if(field.isAnnotationPresent(FruitProvider.class)){

FruitProvider fruitProvider = field.getAnnotation(FruitProvider.class);

logger.info("水果的供應商名稱為:" + fruitProvider.name()+",供應商地址為:"+fruitProvider.addr());

}

}

}

}

import annotation.Ignore;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;

public class FieldsUtil {

final static Logger logger = LoggerFactory.getLogger(FieldsUtil.class);

/**

* 本類的所有 Ignore = false的字段集合

* @param clazz

*/

public static void getOneSelfActiveFieldsUtil(Class clazz){

Field[] fields = clazz.getDeclaredFields();

List fileNames = new ArrayList<>();

for (Field field : fields){

String fieldName = field.getName();

Ignore ignoreField = field.getAnnotation(Ignore.class);

if(field.isAnnotationPresent(Ignore.class) && !ignoreField.ignore()){

fileNames.add(field.getName());

logger.info("fieldName:"+fieldName+"'s ignore is false");

}

else if(!field.isAnnotationPresent(Ignore.class)){

fileNames.add(field.getName());

logger.info("fieldName:"+fieldName+"'s ignore is null");

}

}

logger.info("fields:");

if(fileNames != null && fileNames.size() > 0){

// fileNames.stream().forEach(System.out::println);

fileNames.stream().forEach(y -> {

logger.info(y);

});

}else{

logger.info("Size() == 0 ");

}

logger.info("END");

}

/**

* 包括 父類的所有Ignore = false(默認值)的字段信息

* @param clazz

*/

public static List getAllActiveFieldsUtil(Class clazz){

List fileNames = new ArrayList<>();

List fieldList = null;

Field[] fields;

do{

fields = clazz.getDeclaredFields();

if(fields != null && fields.length > 0){

for (Field field : fields){

String fieldName = field.getName();

Ignore ignoreField = field.getAnnotation(Ignore.class);

if(field.isAnnotationPresent(Ignore.class) && !ignoreField.ignore()){

fileNames.add(field.getName());

logger.info("fieldName:"+fieldName+"'s ignore is false");

fieldList.add(field);

}

else if(!field.isAnnotationPresent(Ignore.class)){

fileNames.add(field.getName());

logger.info("fieldName:"+fieldName+"'s ignore is null");

fieldList.add(field);

}

}

if(fileNames != null && fileNames.size() > 0){

fileNames.stream().forEach(System.out::println);

}else{

logger.info("Size() == 0 ");

}

logger.info("END");

}

clazz = clazz.getSuperclass();

}while (clazz != Object.class && clazz != null);

return fieldList;

}

}

import entity.Apple;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import util.FieldsUtil;

import util.FruitInfoUtil;

public class MainTest {

final static Logger logger = LoggerFactory.getLogger(MainTest.class);

public static void main(String[] args) {

FruitInfoUtil.getAnnotationInfo(Apple.class);

logger.info("====================");

FieldsUtil.getOneSelfActiveFieldsUtil(Apple.class);

}

}

參考資源:

https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html

總結

以上是生活随笔為你收集整理的java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。