自定义注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

/**
*
* @author 无心
* @date 2018-05-08 10:10:10
* 文档id
*/
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DocId {


}


@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {
//必须为小写
String index();

//分片数量
int shards() default 5;

//副本数
int replicas() default 1;

//数据刷新
String refreshInterval() default "1s";

//存储类型
String indexStoreType() default "fs";
}

{———-}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140


/**
* @author 无心
* @date 2018-05-08 10:10:10
* 注解获取封装
*/

public class FieldUtil {



public static void main(String [] args) throws IllegalAccessException, InstantiationException, NoSuchFieldException {

MedCheckDoc medCheckDoc = new MedCheckDoc();

String string = getDocType(medCheckDoc.getClass());
System.err.print(string);
}


/**
* 获取Document注解中的值
* @param clazz
* @return
*/
public static String getDocIndex(Class clazz){
Document document = (Document) clazz.getAnnotation(Document.class);
return document.index();
}


/**
* 获取Document注解中的值
* @param clazz
* @return
*/
public static int getDocShards(Class clazz){
Document document = (Document) clazz.getAnnotation(Document.class);
return document.shards();
}


/**
* 获取Document注解中的值
* @param clazz
* @return
*/
public static int getDocReplicas(Class clazz){
Document document = (Document) clazz.getAnnotation(Document.class);
return document.replicas();
}


/**
* 获取Document注解中的值
* @param clazz
* @return
*/
public static String getDocRefreshInterval(Class clazz){
Document document = (Document) clazz.getAnnotation(Document.class);
return document.refreshInterval();
}


/**
* 获取Document注解中的值
* @param clazz
* @return
*/
public static String getDocIndexStoreType(Class clazz){
Document document = (Document) clazz.getAnnotation(Document.class);
return document.indexStoreType();
}


/**
* 获取DocId被注解字段
* @param clazz
* @return
*/
public static String getDocId(Class clazz) throws NoSuchFieldException {


Field[] fields = clazz.getDeclaredFields();
List<Field> result = new ArrayList<Field>();
for (Field field:fields){
if(field.getAnnotation(DocId.class)!=null){
result.add(field);
}
}
if(result.size()!=1){
throw new NoSuchFieldException("未找到注解");
}
return result.get(0).getName();
}

/**
* 获取DocType被注解字段
* @param clazz
* @return
*/
public static String getDocType(Class clazz) throws NoSuchFieldException {


Field[] fields = clazz.getDeclaredFields();
List<Field> result = new ArrayList<Field>();
for (Field field:fields){
if(field.getAnnotation(DocType.class)!=null){
result.add(field);
}
}
if(result.size()!=1){
throw new NoSuchFieldException("未找到注解");
}

return result.get(0).getName();
}


/**
* 获取DocSearchKeyWord被注解字段
* @param clazz
* @return
*/
public static List<String> getDocKeyword(Class clazz) throws NoSuchFieldException {


Field[] fields = clazz.getDeclaredFields();
List<String> list = new ArrayList<>();
for (Field field:fields){
if(field.getAnnotation(DocSearchKeyWord.class)!=null){
list.add(field.getName());
}
}
if(list.size() ==0){
throw new NoSuchFieldException("未找到注解");
}
return list;
}