使用java的注解(用在java類的方法上的注解)方法
場(chǎng)景:根據(jù)方法上的注解,通過(guò)java反射方式找到需要執(zhí)行的的方法。
1.注解類
/**注解作用在方法上*/
@Target({ElementType.METHOD})
/**注解的生命周期一直程序運(yùn)行時(shí)都存在VM運(yùn)行期間保留注解,可以通過(guò)反射機(jī)制讀取注解信息*/
@Retention(RetentionPolicy.RUNTIME)
/**注解包含在Javadoc中*/
@Documented
public @interface Item {
String value();
}
2.在類的方法上使用注解
public class WorkService {
private static Logger logger = LoggerFactory.getLogger(WorkService.class);
@Item("1001")
public int getItem1001Info(GirlVo girl) {
logger.info("getItem1001Info輸出:");
logger.info(girl.toString());
return 1;
}
@Item("1002")
public int getItem1002Info(GirlVo girl) {
logger.info("getItem1002Info輸出:");
logger.info(girl.toString());
return 1;
}
@Item("1003")
public int getItem1003Info(GirlVo girl) {
logger.info("getItem1003Info輸出:");
logger.info(girl.toString());
return 1;
}
@Item("1004")
public int getItem1004Info(GirlVo girl) {
logger.info("getItem1004Info輸出:");
logger.info(girl.toString());
return 1;
}
@Item("1005")
public int getItem1005Info(GirlVo girl) {
logger.info("getItem1005Info輸出:");
logger.info(girl.toString());
return 1;
}
@Item("1006")
public int getItem1006Info(GirlVo girl) {
logger.info("getItem1006Info輸出:");
logger.info(girl.toString());
return 1;
}
}
3.實(shí)體類,作為參數(shù)傳遞
public class GirlVo implements Serializable {
private static final long serialVersionUID = -8545755852948661858L;
/**ID號(hào)*/
private String girlId;
/**姓名*/
private String girlName;
/**年齡*/
private Long age;
/**身高*/
private Double height;
/**罩杯*/
private String cupSize;
public String getGirlId() {
return girlId;
}
public void setGirlId(String girlId) {
this.girlId = girlId;
}
public String getGirlName() {
return girlName;
}
public void setGirlName(String girlName) {
this.girlName = girlName;
}
public long getAge() {
return age;
}
public void setAge(long age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
@Override
public String toString() {
return "GirlVo [girlId=" + girlId
+",girlName=" + girlName
+",age=" + age
+",height=" + height
+",cupSize=" + cupSize
+"]";
}
}
4.反射調(diào)用方法注解的類
List<Method> methods = MethodUtils.getMethodsListWithAnnotation(clazz,Item.class);
for (Method method : methods) {
for (Annotation annotation : method.getDeclaredAnnotations()) {
if (annotation instanceof Item){
String code = ((Item) annotation).value();
if (Objects.equals(item, code)){
try {
logger.info("注解號(hào):" + code +" 執(zhí)行開始...");
method.invoke(clazz.newInstance(), girlVo);
logger.info("注解號(hào):" + code +" 執(zhí)行結(jié)束...");
} catch (Exception e) {
e.printStackTrace();
logger.info("拋異常...");
}
}
}
}
}
}
}
5.main方法測(cè)試類
public class TestAnnotation {
private static Logger logger = LoggerFactory.getLogger(TestAnnotation.class);
public static void main(String []args) throws ClassNotFoundException{
logger.info("測(cè)試開始......");
HashMap<String,Object> map = (HashMap<String,Object>) getData();
/**遍歷hashMap*/
for(Entry<String,Object> entry : map.entrySet()){
String item = entry.getKey();
GirlVo girlVo = (GirlVo) entry.getValue();
ReflectCallMethodAnnotation.annotationMethod(item,girlVo);
}
logger.info("測(cè)試結(jié)束......");
}
public static Map getData() {
HashMap<String ,Object> data = new HashMap();
GirlVo girlVo1 = new GirlVo();
girlVo1.setGirlId("1001");
girlVo1.setGirlName("張一");
girlVo1.setAge(27);
girlVo1.setHeight(169);
girlVo1.setCupSize("F");
GirlVo girlVo2 = new GirlVo();
girlVo2.setGirlId("1002");
girlVo2.setGirlName("王二");
girlVo2.setAge(29);
girlVo2.setHeight(175);
girlVo2.setCupSize("B");
GirlVo girlVo3 = new GirlVo();
girlVo3.setGirlId("1003");
girlVo3.setGirlName("劉五");
girlVo3.setAge(24);
girlVo3.setHeight(160);
girlVo3.setCupSize("B");
GirlVo girlVo4 = new GirlVo();
girlVo4.setGirlId("1004");
girlVo4.setGirlName("陳六");
girlVo4.setAge(21);
girlVo4.setHeight(168);
girlVo4.setCupSize("C");
GirlVo girlVo5 = new GirlVo();
girlVo5.setGirlId("1005");
girlVo5.setGirlName("趙七");
girlVo5.setAge(25);
girlVo5.setHeight(169);
girlVo5.setCupSize("C");
GirlVo girlVo6 = new GirlVo();
girlVo6.setGirlId("1006");
girlVo6.setGirlName("張八");
girlVo6.setAge(26);
girlVo6.setHeight(165);
girlVo6.setCupSize("A");
data.put("1001", girlVo1);
data.put("1002", girlVo2);
data.put("1003", girlVo3);
data.put("1004", girlVo4);
data.put("1005", girlVo5);
data.put("1006", girlVo6);
return data;
}
}
以上所述是小編給大家介紹的使用java的注解(用在java類的方法上的注解)方法詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot 使用Spring Boot Actuator監(jiān)控應(yīng)用小結(jié)
本篇文章主要介紹了springboot 使用Spring Boot Actuator監(jiān)控應(yīng)用小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
SpringAOP實(shí)現(xiàn)日志收集管理功能(步驟詳解)
這篇文章主要介紹了SpringAOP實(shí)現(xiàn)日志收集管理功能,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
Java報(bào)錯(cuò):UnsupportedOperationException in Collection
在Java編程中,UnsupportedOperationException是一種常見的運(yùn)行時(shí)異常,通常在試圖對(duì)不支持的操作執(zhí)行修改時(shí)發(fā)生,它表示當(dāng)前操作不被支持,本文將深入探討UnsupportedOperationException的產(chǎn)生原因,并提供具體的解決方案和最佳實(shí)踐,需要的朋友可以參考下2024-06-06
Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解
這篇文章主要介紹了Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

