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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java注解实例

發布時間:2025/3/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java注解实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

?

理論

例子


?

理論

注解的作用范圍:@Target

生命周期:@Retention

作用范圍:包、類、字段、方法、方法的參數、局部變量

生命周期:源文件SOURCE、編譯CLASS、運行RUNTIME

?

例子

這里來一個簡單的實例(本實例來源與mooc網,本人只是抄了一遍,和進行了簡單的修改,在此感謝下mooc的老師)

程序運行截圖如下:

程序結構如下:

Column.java

package my;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Column {String value(); }

Filter.java

package my;@Table("user") public class Filter {@Column("id")private int id;@Column("user_name")private String userName;@Column("nick_name")private String nickName;@Column("age")private int age;@Column("city")private String city;@Column("email")private String email;@Column("mobile")private String mobile;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getMobile() {return mobile;}public void setMobile(String mobile) {this.mobile = mobile;} }

Table.java

package my;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table {String value(); }

Test.java

package my;import java.lang.reflect.Field; import java.lang.reflect.Method;public class Test {public static void main(String[] args) {Filter f1 = new Filter();f1.setId(10);Filter f2 = new Filter();f2.setUserName("lucy");Filter f3 = new Filter();f3.setEmail("liu@sina.com, zh@163.com, 77777@qq.com");String sql1 = query(f1);String sql2 = query(f2);String sql3 = query(f3);System.out.println(sql1);System.out.println(sql2);System.out.println(sql3);}private static String query(Filter f) {StringBuilder sb = new StringBuilder();//1. 獲取到注解@SuppressWarnings("rawtypes")Class c = f.getClass();//2. 獲取table的名字@SuppressWarnings("unchecked")boolean exists =c.isAnnotationPresent(Table.class);if(!exists) {return null;}@SuppressWarnings("unchecked")Table t = (Table)c.getAnnotation(Table.class);String tableName = t.value();sb.append("select * from ").append(tableName).append(" where 1 = 1");//3. 遍歷所有的字段Field[] fArray = c.getDeclaredFields();for(Field field : fArray) {//4. 處理每個字段對應的sql//4.1 拿到字段名boolean fExists = field.isAnnotationPresent(Column.class);if(!fExists) {continue;}Column column = field.getAnnotation(Column.class);@SuppressWarnings("unused")String columnName = column.value();//4.2 拿到字段的值,用反射得到字段String filedName = field.getName();String getMethodName = "get" + filedName.substring(0, 1).toUpperCase() +filedName.substring(1);//通過反射取得值Object fieldValue = null;try {@SuppressWarnings("unchecked")Method getMethod = c.getMethod(getMethodName);fieldValue = getMethod.invoke(f);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//4.3 拼裝sqlif(fieldValue == null ||(fieldValue instanceof Integer &&(Integer)fieldValue == 0)) {continue;}sb.append(" and ").append(filedName);if(fieldValue instanceof String) {if(((String)fieldValue).contains(",")) {String[] values = ((String)fieldValue).split(",");sb.append(" in(");for(String v : values) {sb.append("'").append(v).append("'").append(",");}sb.deleteCharAt(sb.length() - 1);sb.append(")");}else {sb.append("=").append("'").append(fieldValue).append("'");}}else if(fieldValue instanceof Integer) {sb.append("=").append(fieldValue);}}return sb.toString();} }

這里我對注解的感悟,感覺是一個flag,通過這個flag,可以為每一個類,類中成員,標識一個項目需要的東西。

?

總結

以上是生活随笔為你收集整理的Java注解实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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