[关闭]
@guoxs 2016-06-04T06:23:07.000000Z 字数 3272 阅读 2336

Java 注解

java


注解: Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法。

JDK自带注解: 编译时注解

  1. @Override
  2. Deprecated
  3. Suppvisewarnings

常见第三方注解
Spring

Mybatis

注解的分类
按运行机制分:

按来源分:

自定义注解
语法要求:

  1. //元注解
  2. @Target({ElementType.METHOD, ElementType.TYPE})
  3. @Retention(RetentionPolicy.RUNTIME)
  4. @Inherited //允许子继承
  5. @Documented //生成javadoc时会包含注解
  6. //使用@interface关键字定义注解
  7. public @interface Description{
  8. //成员以无参数无异常方式声明
  9. String desc();
  10. String author();
  11. //可以用default为成员指定一个默认值
  12. int age() default 18;
  13. }

元注解 : 注解的注解
元注解
元注解

使用自定义注解
使用注解的语法:
@<注解名>(<成员名1>=<成员值1>, <成员名1>=<成员值1>, ...)

  1. @Description(desc="I an eyeColor", author="Mooc boy", age=18)
  2. public String eyeColor(){
  3. return "red";
  4. }

解析注解

通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。

源码:

  1. @Table("student")
  2. public class Filter {
  3. @Column("id")
  4. private int stuId;
  5. @Column("name")
  6. private String stuName;
  7. @Column("email")
  8. private String email;
  9. public int getStuId() {
  10. return stuId;
  11. }
  12. public void setStuId(int stuId) {
  13. this.stuId = stuId;
  14. }
  15. public String getStuName() {
  16. return stuName;
  17. }
  18. public void setStuName(String stuName) {
  19. this.stuName = stuName;
  20. }
  21. public String getEmail() {
  22. return email;
  23. }
  24. public void setEmail(String email) {
  25. this.email = email;
  26. }
  27. }
  1. import java.lang.annotation.ElementType;
  2. import java.lang.annotation.Retention;
  3. import java.lang.annotation.RetentionPolicy;
  4. import java.lang.annotation.Target;
  5. @Target({ElementType.FIELD})
  6. @Retention(RetentionPolicy.RUNTIME)
  7. public @interface Column {
  8. String value();
  9. }
  1. import java.lang.reflect.Field;
  2. import java.lang.reflect.Method;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Filter f1 = new Filter();
  6. f1.setStuId(10);
  7. Filter f2 = new Filter();
  8. f2.setStuId(10);
  9. f2.setStuName("baoyou");
  10. Filter f3 = new Filter();
  11. f3.setEmail("1223716098@qq.com,curiousby@163.com");
  12. String sql1 = query(f1);
  13. String sql2 = query(f2);
  14. String sql3 = query(f3);
  15. System.out.println(sql1);
  16. System.out.println(sql2);
  17. System.out.println(sql3);
  18. }
  19. @SuppressWarnings("unchecked")
  20. private static String query(Filter f) {
  21. StringBuffer sb = new StringBuffer();
  22. Class c= f.getClass();
  23. boolean isExist = c.isAnnotationPresent(Table.class);
  24. if (!isExist) {
  25. return null;
  26. }
  27. Table t = (Table) c.getAnnotation(Table.class);
  28. String tableName = t.value();
  29. sb.append(" select * from ").append(tableName).append(" 1=1 ");
  30. Field[] fArray = c.getDeclaredFields();
  31. for (Field field : fArray) {
  32. boolean fExist = field.isAnnotationPresent( Column.class);
  33. if (!fExist) {
  34. continue;
  35. }
  36. Column column = field.getAnnotation(Column.class);
  37. String columnName = column.value();
  38. String fieldName = field.getName();
  39. String getMethodName = "get" +fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
  40. Object fieldValue=null;
  41. try {
  42. Method getMethod =c.getMethod(getMethodName);
  43. fieldValue = getMethod.invoke(f);
  44. } catch (Exception e) {
  45. }
  46. if (fieldValue == null || (fieldValue instanceof Integer && (Integer)fieldValue == 0) ) {
  47. continue;
  48. }
  49. sb.append(" and ").append( columnName );
  50. if (fieldValue instanceof String){
  51. if (((String) fieldValue ).contains(",")) {
  52. String[] values = ((String) fieldValue ).split(",");
  53. sb.append(" in ( ");
  54. for (String v : values) {
  55. sb.append("'").append(v).append("',");
  56. }
  57. sb.deleteCharAt(sb.length()-1);
  58. sb.append(" )");
  59. } else{
  60. sb.append(" = '").append(fieldValue).append("' ");
  61. }
  62. }else if (fieldValue instanceof Integer){
  63. sb.append(" = ").append(fieldValue).append(" ");
  64. }
  65. }
  66. return sb.toString();
  67. }
  68. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注