反射注解练习

反射

为什么要使用反射?
1,增加程序的灵活性,可扩展性,动态创建对象。

2,框架必备,任何框架的封装都要用反射。(框架的灵魂)

获取Class对象的三种方式?
1,Class.forName();

2,类名.class;

3,对象.getClass();

使用类反射创建对象:.newInstance();
获取全部的属性信息:.getDeclaredFields();
获取公共的属性信息:getFields()
获取单个属性:getFields()
暴力反射.setAccessible(true);
获取方法:invoke()

注解

元注解 默认的注解,自定义必须要加上

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target { ElementType[] value(); } @Target(ElementType.TYPE) //接口、类、枚举、注解 @Target(ElementType.FIELD) //字段、枚举的常量 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法参数 @Target(ElementType.CONSTRUCTOR) //构造函数 @Target(ElementType.LOCAL_VARIABLE)//局部变量 @Target(ElementType.ANNOTATION_TYPE)//注解 @Target(ElementType.PACKAGE) ///包
基于自定义注解和反射的增加小案例

 public static String insert(Object obj) throws Exception{
        StringBuffer sb=new StringBuffer("insert into ");
        Class<?> aClass = obj.getClass();//通过穿过来的属性获取class
        //根据传过来的注解的名字获取当前类里面的注解
        MyTable annotation = aClass.getAnnotation(MyTable.class);//如果没有加注解则为null
       //拼接数据库名
        if (annotation==null){//如果为null时,则拼接类名
            sb.append(aClass.getName().substring(aClass.getName().lastIndexOf(".")+1));
        }else {//如果有值时,则拼接注解内的名字
        sb.append(annotation.name());
        }
        sb.append("(");
        StringBuffer values=new StringBuffer("value(");
            //获取所有的字段
        Field[] fields = aClass.getDeclaredFields();
        for (Field field:fields
             ) {
            //判断属性上有没有注解
            MyFiled myFiled = field.getAnnotation(MyFiled.class);
            field.setAccessible(true);//暴力破解
        if (myFiled==null){
            sb.append(",");
            sb.append(field.getName());
            values.append(",");
            values.append("'"+field.get(obj)+"'");
            continue;
        }
        //是否被忽略
      boolean isno = myFiled.isno();
        if (isno){
            continue;
        }
            sb.append(",");
            sb.append(myFiled.value());

            values.append(",");
            values.append("'"+field.get(obj)+"'");
        }
        sb.append(")");
        values.append(")");
        return sb.toString()+values;
    } 
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值