java注解机制


 * 
 *         •Annotation的作用: – 不是程序本身,可以对程序作出解释。 (这一点,跟注释没什么区别) –
 *         可以被其他程序(比如:编译器等)读取。 (注解信息处理流程,是注解和注释的重大区别 。如果没有注解信息处理流程, 则注解毫无意义)
 *         给类添加注解,相当于对类进行了说明, 并且还可以被其他的程序读到 如hibernate使用注解,我们使用的注解可以被hibernate读到
 * 
 *         • Annotation的格式: – 注解是以“@注释名”在代码中存在的
 *         ,还可以添加一些参数值,例如: @SuppressWarnings(value="unchecked")。
 * 
 *         • Annotation在哪里使用? – 可以附加在package, class, method, field等上面,
 *         相当于给它们添加了额外的辅助信 息, 我们可以通过反射机制编程实现对这些元数据的访问
 * 
 *         内置注解: • @Override – 定义在java.lang.Override中, 此注释只适用于修辞方法,表示一个方
 *         法声明打算重写超类中的另一个 方法声明。
 * 
 *         • @Deprecated – 定义在java.lang.Deprecated中, 此注释可用于修辞方法、属性、类
 *         ,表示不鼓励程序员使用这样的元素, 通常是因为它很危险或存在更 好的选择
 *         
 *         内置注解:
 *         
 *         • @Override 
 *         – 定义在java.lang.Override中,此注释只适用于修辞方法,
 *         表示一个方 法声明打算重写超类中的另一个方法声明。
 *          • @Deprecated 
 *          – 定义在java.lang.Deprecated中,
 *          此注释可用于修辞方法、属性、类 ,
 *          表示不鼓励程序员使用这样的元素
 *         ,通常是因为它很危险或存在更 好的选择
 *         
 *         • @SuppressWarnings 
 *         – 定义在java.lang.SuppressWarnings中,
 *            用来抑制编译时的警告信息 。
 *         – 与前两个注释有所不同,你需要添加一个参数才能正确使用,
 *         这些参 数值都是已经定义好了的,我们选择性的使用就好了,
 *         参数如下
 *         deprecation/uncheked/fallthrough/path/serial/finally/all
 *         
 *         – @SuppressWarnings("unchecked") 
 *         – @SuppressWarnings(value={"unchecked", "deprecation"})
 *         

public class CUAnnotation {
    @Override // 表示一个方 法声明打算重写超类中的另一个方法声明
    public String toString() {
        return "";
    }

    @Deprecated // 表示不鼓励程序员使用这样的元素
    public String toStringt() {
        return "";
    }
    
    public String toStringte() {
        return "";
    }
}

 *         自定義注解: 
 *         • 使用@interface自定义注解时, 
 *         自动继承了java.lang.annotation.Annotation接口 
 *         •要点: 
 *         – @interface用来声明一个注解 
 *         • 格式为: – public @interface 注解名 {定义体} 
 *         –其中的每一个方法实际上是声明了一个配置参数。
 *          – 方法的名称就是参数的名称 – 返回值类型就是参数的类型
 *          (返回值类型只能是基本类型、
 *         Class、String、enum)
 *          – 可以通过default来声明参数的默认值。
 *           – 如果只有一个参数成员,一般参数名为value 
 *           •注意: 注解元素必须要有值。
 *           我们定义注解元素时, 经常使用空字符串、0作为默认值。
 *            也经常使用负数(比如:-1)表示不存在的含义
 *            
 *            元注解:
 *            • 元注解的作用就是负责注解其他注解。 
 *            Java定义了4个标准的 meta-annotation类型,
 *            它们被用来提供对其它 annotation 类型作说明。
 *             • 这些类型和它们所支持的类在java.lang.annotation包中可以 找到
 *             – @Target
 *             – @Retention
 *             – @Documented
 *             – @Inherited
 *             
 *             – @Target
 *             • 作用: – 用于描述注解的使用范围
 *             (即:被描述的注解可以用在什么地方)
 *             
 *         
 *             (重要)的@Retention
 *               – @Retention
 *                • 作用: 
 *                     – 表示需要在什么级别保存该注释信息,
 *                     用于描述注解的生命周
 *           (SOURCE、CLASS(编辑器、加载器)、RUNTIME通过反射读取)
 *                
 *           
 *

 *         ORM()对象关系映射
 *
 *         •使用注解完成类和表结构的映射关系
 *1.
 *使用自定义注解@OrmAnnotaytion("tb_student")
 *表示此类和哪个表对应,表名为tb_student
 *2**
     * 对属性(变量)进行说明 这个对应表的属性字段,类型是,长度为
     *
     *再使用反射机制对注解信息进行读取看MYOrmclass.java
 */
@OrmAnnotaytion("tb_student")
public class MYOrm {
    /**
     * 对属性(变量id)进行说明 这个id对应表的属性字段id,类型是int,长度为10
     */
    @OrmAnnotaytiontable(columName = "id", type = "int", length = 10)
    private int id;
    /**
     * 对属性(变量studentName)进行说明 这个studentName对应表的属性字段sname,类型是int,长度为10
     */
    @OrmAnnotaytiontable(columName = "sname", type = "int", length = 10)
    private String studentName;
    /**
     * 对属性(变量age)进行说明 这个age对应表的属性字段age,类型是int,长度为3
     */
    @OrmAnnotaytiontable(columName = "age", type = "int", length = 3)
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

 *
 *         反射机制读取注解的信息
 */
public class MYOrmclass {
    public static void main(String[] args) {
        try {
            // 1.加载这个类形成对象clzz
            Class<?> clzz = Class.forName("com.renhui.cn.MYOrm");
            // 2获取类的所有注解
            Annotation[] annotations = clzz.getAnnotations();
            for (Annotation a : annotations) {
                System.out.println(a);
            }
            // 3获取这个类里面一个具体的指定的注解OrmAnnotaytion
            OrmAnnotaytion or = (OrmAnnotaytion) clzz.getAnnotation(OrmAnnotaytion.class);
            // 打印这个注解的value值
            System.out.println(or.value());
            //4获得类中指定的属性的注解自定义注解的名字为OrmAnnotaytiontable
            //这个方法返回一个Filed对象代表这个属性(也就是MYOrm中的变量studentName)
            Field f =clzz.getDeclaredField("studentName");
            //获取这个属性的注解,返回一个这个自定义的注解的对象
            OrmAnnotaytiontable orr =    f.getAnnotation(OrmAnnotaytiontable.class);
            System.out.println(orr.columName()+"--"+orr.type()+"--"+orr.length());
            //根据获得的表名 字段信息来构建sql语句,使用jdbc来执行sql语句从而建立一个数据库
            
            
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("null");
        }

    }
}

自定义的注解部分:

 *MYOrm使用的自定义注解
 *这个注解用来说明被注解的类与哪个对应(这里是一个表,参数是表名)
 */

@Target(value= {ElementType.TYPE})//TYPE修饰类,对一个类进行修饰
@Retention(RetentionPolicy.RUNTIME)//在源文件中有效(自我笔记:用于反射可以读到)
public @interface OrmAnnotaytion {
    String value();/*一个参数,和那个表对应,表名*/
}
 

 *MYOrm使用的自定义注解
 *这个注解用来说明被注解的属性的特性(这里是用来对应列名)
 */
@Target(value = { ElementType.FIELD }) // FIELD修饰属性,对属性进行修饰
@Retention(RetentionPolicy.RUNTIME)
public @interface OrmAnnotaytiontable {
    String columName();

    String type();

    int length();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值