java中注解的总结

注解是在程序的源文件,编译时及运行中提供元数据为java在原有的强大功能下构建更灵活的程序;

    即在源码中,类文件以及运行时提供元数据。

java注解的分类从两个角度分,从提供方来说:第一类为java平台自带的,第二类为第三方库,第三类为自定义。从状态的角度来说:分为源码注解,类注解,运行时注解;

 自定义注解

一    定义:

 @Target({ElementType,TYPE})  //注解能放置的位置

 @Retention(RetentionPolicy.RUNTIME)    //注解起作用的范围

 @Inherited  //子类可用

 @Document  //文档可用

   public @interface Table{

        String value();    

}

@Target({ElementType,FIELD,...})  //注解能放置的位置

 @Retention(RetentionPolicy.RUNTIME)    //注解起作用的范围

 @Inherited  //子类可用

 @Document  //文档可用

   public @interface Column{

        int id();

        int age();

        boolean gender();

        String name() default "xiaoming";   //  注解类型和注解名   表明注解类型,注解的名字  default  指定默认值

}



@Target 中ElementType的种类:

PACKAGE        TYPE      CONSTRUCT        METHOD       FIELD        PARAMETER LOCAL_VARIABLE


@Retention 中的RetentionPolicy

   SOURCE          CLASS          RUNTIME   

二,使用:

    @Table("student")

    public class student{

        @Column("id")

        private int id;

       @Column("age")

        private int age;

        @Column("name")

       private String name;

}

使用实现片段代码:


   package org.seehunter.annotation;


import java.lang.reflect.Field;
import java.lang.reflect.Method;


import javax.management.Query;
import javax.xml.bind.ValidationEvent;


public class Test {
public static void main(String[] args) {
Filter filter=new Filter();
String sql=query(filter);
System.out.println(sql);
}

public static String query(Filter ft) {
StringBuilder sb=new StringBuilder();
Class c=ft.getClass();
boolean exists=c.isAnnotationPresent(Table.class);
if(!exists) {
return null;
}
Table t=(Table)c.getAnnotation(Table.class);
String tableName=t.value();
sb.append("select * from ").append(tableName).append(" where 1=1");
Field[] fArray=c.getDeclaredFields();
for(Field field:fArray) {
boolean fExists=field.isAnnotationPresent(Column.class);
if(!fExists) {
continue;
}
String fieldName=field.getName();
String getMethodName="get"+fieldName.substring(0, 1).toUpperCase()+
fieldName.substring(1);
Object  fieldValue=null;
try {
Method getMethod=c.getMethod(getMethodName);
fieldValue=getMethod.invoke(ft);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//sb.append(" and ").append(fieldName).append("=").append(fieldValue);
//advanced
if(fieldValue==null
|| fieldValue instanceof Integer &&(Integer)fieldValue==0) {
continue;
}
sb.append(" and ").append(fieldName);
if(fieldValue instanceof String) {
sb.append("=").append("'").append(fieldValue).append("'");
}else if(fieldValue instanceof Integer) {
sb.append("=").append(fieldValue);
}
}
return sb.toString();
}

}

具体使用请参见  

框架基础——全面解析Java注解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值