場景:根據(jù)方法上的注解,通過java反射方式找到需要執(zhí)行的的方法。
1.注解類
2 | @Target ({ElementType.METHOD}) |
3 | /**注解的生命周期一直程序運(yùn)行時(shí)都存在VM運(yùn)行期間保留注解,可以通過反射機(jī)制讀取注解信息*/ |
4 | @Retention (RetentionPolicy.RUNTIME) |
7 | public @interface Item { |
2.在類的方法上使用注解
01 | public class WorkService { |
03 | private static Logger logger = LoggerFactory.getLogger(WorkService. class ); |
06 | public int getItem1001Info(GirlVo girl) { |
08 | logger.info( "getItem1001Info輸出:" ); |
09 | logger.info(girl.toString()); |
13 | public int getItem1002Info(GirlVo girl) { |
15 | logger.info( "getItem1002Info輸出:" ); |
16 | logger.info(girl.toString()); |
20 | public int getItem1003Info(GirlVo girl) { |
21 | logger.info( "getItem1003Info輸出:" ); |
22 | logger.info(girl.toString()); |
26 | public int getItem1004Info(GirlVo girl) { |
27 | logger.info( "getItem1004Info輸出:" ); |
28 | logger.info(girl.toString()); |
32 | public int getItem1005Info(GirlVo girl) { |
33 | logger.info( "getItem1005Info輸出:" ); |
34 | logger.info(girl.toString()); |
38 | public int getItem1006Info(GirlVo girl) { |
39 | logger.info( "getItem1006Info輸出:" ); |
40 | logger.info(girl.toString()); |
3.實(shí)體類,作為參數(shù)傳遞
01 | public class GirlVo implements Serializable { |
03 | private static final long serialVersionUID = -8545755852948661858L; |
05 | private String girlId; |
07 | private String girlName; |
11 | private Double height; |
13 | private String cupSize; |
14 | public String getGirlId() { |
17 | public void setGirlId(String girlId) { |
20 | public String getGirlName() { |
23 | public void setGirlName(String girlName) { |
24 | this .girlName = girlName; |
26 | public long getAge() { |
29 | public void setAge( long age) { |
32 | public double getHeight() { |
35 | public void setHeight( double height) { |
38 | public String getCupSize() { |
41 | public void setCupSize(String cupSize) { |
42 | this .cupSize = cupSize; |
46 | public String toString() { |
48 | return "GirlVo [girlId=" + girlId |
49 | + ",girlName=" + girlName |
52 | + ",cupSize=" + cupSize |
4.反射調(diào)用方法注解的類
01 | List<Method> methods = MethodUtils.getMethodsListWithAnnotation(clazz,Item. class ); |
02 | for (Method method : methods) { |
03 | for (Annotation annotation : method.getDeclaredAnnotations()) { |
04 | if (annotation instanceof Item){ |
05 | String code = ((Item) annotation).value(); |
06 | if (Objects.equals(item, code)){ |
08 | logger.info( "注解號:" + code + " 執(zhí)行開始..." ); |
09 | method.invoke(clazz.newInstance(), girlVo); |
10 | logger.info( "注解號:" + code + " 執(zhí)行結(jié)束..." ); |
11 | } catch (Exception e) { |
13 | logger.info( "拋異常..." ); |
5.main方法測試類
01 | public class TestAnnotation { |
03 | private static Logger logger = LoggerFactory.getLogger(TestAnnotation. class ); |
05 | public static void main(String []args) throws ClassNotFoundException{ |
06 | logger.info( "測試開始......" ); |
07 | HashMap<String,Object> map = (HashMap<String,Object>) getData(); |
09 | for (Entry<String,Object> entry : map.entrySet()){ |
10 | String item = entry.getKey(); |
11 | GirlVo girlVo = (GirlVo) entry.getValue(); |
12 | ReflectCallMethodAnnotation.annotationMethod(item,girlVo); |
15 | logger.info( "測試結(jié)束......" ); |
19 | public static Map getData() { |
21 | HashMap<String ,Object> data = new HashMap(); |
23 | GirlVo girlVo1 = new GirlVo(); |
24 | girlVo1.setGirlId( "1001" ); |
25 | girlVo1.setGirlName( "張一" ); |
27 | girlVo1.setHeight( 169 ); |
28 | girlVo1.setCupSize( "F" ); |
30 | GirlVo girlVo2 = new GirlVo(); |
31 | girlVo2.setGirlId( "1002" ); |
32 | girlVo2.setGirlName( "王二" ); |
34 | girlVo2.setHeight( 175 ); |
35 | girlVo2.setCupSize( "B" ); |
37 | GirlVo girlVo3 = new GirlVo(); |
38 | girlVo3.setGirlId( "1003" ); |
39 | girlVo3.setGirlName( "劉五" ); |
41 | girlVo3.setHeight( 160 ); |
42 | girlVo3.setCupSize( "B" ); |
44 | GirlVo girlVo4 = new GirlVo(); |
45 | girlVo4.setGirlId( "1004" ); |
46 | girlVo4.setGirlName( "陳六" ); |
48 | girlVo4.setHeight( 168 ); |
49 | girlVo4.setCupSize( "C" ); |
51 | GirlVo girlVo5 = new GirlVo(); |
52 | girlVo5.setGirlId( "1005" ); |
53 | girlVo5.setGirlName( "趙七" ); |
55 | girlVo5.setHeight( 169 ); |
56 | girlVo5.setCupSize( "C" ); |
58 | GirlVo girlVo6 = new GirlVo(); |
59 | girlVo6.setGirlId( "1006" ); |
60 | girlVo6.setGirlName( "張八" ); |
62 | girlVo6.setHeight( 165 ); |
63 | girlVo6.setCupSize( "A" ); |
65 | data.put( "1001" , girlVo1); |
66 | data.put( "1002" , girlVo2); |
67 | data.put( "1003" , girlVo3); |
68 | data.put( "1004" , girlVo4); |
69 | data.put( "1005" , girlVo5); |
70 | data.put( "1006" , girlVo6); |
以上所述是小編給大家介紹的使用java的注解(用在java類的方法上的注解)方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!