zoukankan      html  css  js  c++  java
  • java 自定义注解(3)

    注解1:

    带参数:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TableRef {
        String value();
    }

    注解2:

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Rowkey {
    }

    注解3:

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Column {
        String family() default "info";
        String column() default  "";
    }

    java bean:

    @Data
    @TableRef("ct:calllog")
    public class Calllog {
        @Rowkey
        private String rowkey;
        @Column(family = "caller")
        private String call1;
        @Column(family = "caller")
        private String call2;
        @Column(family = "caller")
        private String calltime;
        @Column(family = "caller")
        private String duration;
        @Column(family = "caller")
        private String flg = "1";
    }

    使用:

        protected void putData(Object obj) throws Exception {
    
            // 反射
            Class clazz = obj.getClass();
            TableRef tableRef = (TableRef)clazz.getAnnotation(TableRef.class);
            String tableName = tableRef.value();
    
            Field[] fs = clazz.getDeclaredFields();
            String stringRowkey = "";
            for (Field f : fs) {
                Rowkey rowkey = f.getAnnotation(Rowkey.class);
                if ( rowkey != null ) {
                    f.setAccessible(true);
                    stringRowkey = (String)f.get(obj);
                    break;
                }
            }
    
            Connection conn = getConnection();
            Table table = conn.getTable(TableName.valueOf(tableName));
            Put put = new Put(Bytes.toBytes(stringRowkey));
    
            for (Field f : fs) {
                Column column = f.getAnnotation(Column.class);
                if (column != null) {
                    String family = column.family();
                    String colName = column.column();
                    if ( colName == null || "".equals(colName) ) {
                        colName = f.getName();
                    }
                    f.setAccessible(true);
                    String value = (String)f.get(obj);
    
                    put.addColumn(Bytes.toBytes(family), Bytes.toBytes(colName), Bytes.toBytes(value));
                }
            }
    
            // 增加数据
            table.put(put);
    
            // 关闭表
            table.close();
        }
  • 相关阅读:
    【Linux】在Linux上,使用校园出校器拨号的一个脚本。
    【Android】编译CM10.1遇到的错误解决方案
    【Android】编译CM10遇到的错误解决方案
    【Android】CM在repo中使用local manifest
    一个网站的诞生 MagicDict开发总结1 [首页]
    我记录网站综合系统 1.6发布
    带有ToolTip的ListBox
    字符串的宽度
    .NET开发的文本编辑器,(又发明轮子了,VB代码,不喜误入)
    捕获输入内容
  • 原文地址:https://www.cnblogs.com/lshan/p/12102740.html
Copyright © 2011-2022 走看看