注解+XML文件+属性文件

第一节 复习

反射技术 :
Class类 --》反射技术的入口
a)如何获取一个类的Class对象 , 最常用的方式Class.forName(“完整的包名+类名”);
举例:Class.forName(“com.mysql.jdbc.Driver”);
b)Class是所以使用class声明的数据类型[类类型]的模板
一个类需要具备 1)属性 2)方法 3)构造方法
使用Class对象获取任意一个类的属性 -->属性对象 Field 对象
使用Class对象获取任意一个类的方法 --> 方法对象 Method对象 ,在Method类有一个非常重要的方法 invoke (…)
使用Class对象获取任意一个类的构造方法 -->构造方法对象 Constructor 对象,在,Constructor类有一个非常重要的方法 newInstance().,用于创建类的对象

第二节 注解

2.1 注解的简介

注解的作用
①不是程序本身,可以对程序作出解释。(这一点跟注释没什么区别)
②可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别,如果没有注解信息处理流程,则注解毫无意义)

注解的格式
注解是以”@注释名”在代码中存在,还可以添加一些参数值,例如@SuppressWarnings(value=”unchecked”)。

注解在哪里使用
可以附加在package,class,method,field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元素的访问。
内置的注解
①@Override :标识方法是重写的方法
② @Deprecated :标识的方法不建议使用
③ @SuppressWarnings:用来抑制编译时的警告信息
④@SuppressWarinings需要提供参数才能正常使用,这些参数都是已经定义好的,我们只需要选择就可以了。
在这里插入图片描述
举例:
@SuppressWarnings(“unchecked”)
@SuppressWarnings(value={“unchecked”,“deprecation”})

自定义注解的语法
使用@interface定义自定义注解时,自动继承了java.lang.annotation.Annotation接口
【1】@interface 用来声明一个注解
【2】其中的每一个方法实际上是声明了一个配置参数
◆ 方法的名称就是参数的名称
◆ 返回值类型就是参数类型(返回值类型只能是基本类型、Class、String、enum)
◆ 可以通过default来声明参数的默认值
◆ 如果只有一个成员,一般参数名为value
注意事项:注解元素必须要有值。我们定义注解元素时,经常使用空字符串,0作为默认值。
也经常使用负数(比如-1)表示不存在的含义

元注解
元注解的作用就是负责注解其他注解。在Java中定义了4个标准的meta-annotation类型,它们被用来提供对其它annotation类型作说明
这些类型和它们所支持的类在java.lang.annotation包中可以找到
◆@Target
◆@Retention
◆@Documented
◆@Inherited

@Target
作用:用于描述注解的使用范围(即被描述的注解可以用在什么地方)

@Retention
作用:表示需要在什么级别保存该注解信息,用于描述注解的生命周期
在这里插入图片描述

2.2 自定义注解及使用

自定义注解

package com.bjsxt.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

/**
 * 自定义注解
 */
@Target({
   TYPE,METHOD,FIELD})  //@Target说明自定义注解MyAnnotation 的适用范围 是类,接口,。。方法,属性
@Retention(RUNTIME)   //@Retention说明自定义的的注解MyAnnotation的使用时机,是程序运行时
public @interface MyAnnotation {
   
    String value();//注解的参数
}

使用注解 (将注解应用到类上,属性上,方法上)

package com.bjsxt.annotation;

/**
 *给MyUser类添加注解
 */
@MyAnnotation(value = "这是一个用户类")  //在类上使用注解
public class MyUser {
   

    @MyAnnotation(value = "用户编号")   //在属性上使用注解
    private String uid;
    @MyAnnotation(value = "这是一个显示用的方法")  //在方法上使用注解
    public void show(){
   

    }
}

使用反射技在程序运时读取注解

package com.bjsxt.annotation;

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

import static java.lang.Class.forName;

/**
 * 使用反射技术在程序运行时读取注释
 */
public class Test {
   
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
   
        Class aClass = forName("com.bjsxt.annotation.MyUser");

        //
        Annotation[] annotations = aClass.getAnnotations();
        for (Annotation annotation:annotations) {
   
            Class aClass1 = annotation.annotationType();
            System.out.println("注解的类名称"+aClass1.getName());
        }
        System.out.println("-----------------------我是分割线---------------------------");
        MyAnnotation annotation1 = (MyAnnotation) aClass.getAnnotation(MyAnnotation.class);
        System.out.println("注解上注解的参数值"+annotation1.value());

        //
        Field[] fields = aClass.getDeclaredFields();
        for (Field field:fields) {
   
            MyAnnotation annotation = field.getAnnotation(MyAnnotation.class);
            System.out.println("属性上的注解"+annotation.value());
        }

        //
        Method show = aClass.getDeclaredMethod("show");
        MyAnnotation annotation = show.getAnnotation(MyAnnotation.class);
        System.out.println("注解的参数值"+annotation.value());
        
    }
}

2.3 课堂案例_反射读取注解信息

有一个Java类名称为Student,使用ORM思想(类和表对应,属性和字段对应,对象和数据行对应)使用注解完成类和表结构的映射关系,在类上使用注解,在程序运行时,通过反射读取注解,在数据库中创建Student类对应的数据表tb_student。

操作步骤
(1)创建Student类
(2)编写注解
a)编写应用在Student类上的注解 ,后期用于数据库中表的名称
b)编写应用在Student类上的属性上的注解,后期用于数据库表中的字段
【一个字段由三部分组成,名称,数据类型,长度】
(3)在Student类和属性上应用注解
(4)准备jdbcutil和jar包
(5)写测试,使用反射读取注解

使用注解完成类和表结构的映射关系,怎么映射呀?发现表名和类名是不对等的,字段名和属性名也有可能对不上,怎么办?就需要使用注解来让他们对应起来。那么我们就做这样一件事情:将java当中Student类使用使用第三方程序(就是我们写的程序)用过读取注解在数据库中创建一张表出来。(也就是在java中有一个Student类,在Student类中使用注解,在程序运行的时候,使用反射读取注解,到数据库当中,把这个表创建出来)
【1】创建Student类

package com.bjsxt.deno;

/**
 *bean类
 */
public class Student {
   
    private int stuId;
    private String stuName;
    private int age;
    
    public int getStuId() {
   
        return stuId;
    }
    public void setStuId(int stuId) {
   
        this.stuId = stuId;
    }
    public String getStuName() {
   
        return stuName;
    }
    public void setStuName(String stuName) {
   
        this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值