java注解

1,什么是java注解。

注解(Annotation),也叫元数据,标签,注释。注解有时候,也叫注释,但是容易和java的注释// /**/混淆, 一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

2,为什么要学注解

(1,因为java框架基本都用的注解,用注解很方便,不用到处翻配置文件查看配置,不懂注解就看不懂框架的配置。

(2,别人写的代码中有注解,不懂注解看不懂代码。

3,注解的作用

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】比如api文档;

②代码分析:通过代码里标识的元数据对代码进行分析【使用反射】

(可以通过反射 看这个类有没有注解,有注解的时候,代码应该怎么写,没有注解的时候,应该怎么写)

③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

 第二种用处最大。

4,注解的用法

@+注解的名称

比如@Override,@WebServlet

这些注解可以放在类上面,方法上面,方法里面。

5,元注解

元注解是写给注解的注解,用于规定和解释注解。

常用的元注解:

@Retention  : 生命长度(涉及到一个Java文件从开始-编译-运行 整个生命周期)

@Target     : 使用范围(常用)

@Documented : 文档 (简单了解)

@Inherited  :继承(简单了解)

6,自定义一个注解类,格式就是public @interface name{}

自定义了一个注解类,名为Vip。

package xin.wangjinlong.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//元注解Target,规定了这个注解只能用在类上
@Target(ElementType.TYPE)
//元注解Retention,规定了这个注解可以存活到运行时期
@Retention(RetentionPolicy.RUNTIME)
public @interface Vip {
//给自定义注解配置了一个属性叫做value,可以接收String类型的值,默认值为false
    String value() default "false";
}

7,给两个类打上自定义的注解

package xin.wangjinlong.beans;

import xin.wangjinlong.anno.Vip;

@Vip
public class Admin {
    String adminName;
    String adminPassword;
    public String getAdminName() {
        return adminName;
    }

    public void setAdminName(String adminName) {
        this.adminName = adminName;
    }

    public String getAdminPassword() {
        return adminPassword;
    }

    public void setAdminPassword(String adminPassword) {
        this.adminPassword = adminPassword;
    }
}

给value赋值为true 

package xin.wangjinlong.beans;

import xin.wangjinlong.anno.Vip;

@Vip("true")
public class User {
    String username;
    String password;
    int age;
    String email;
    String sex;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

测试类,获取有注解类的class,然后获取到value的值,判断值是多少,打印出该类是不是VIP。一般地,注解的具体实现都是第三方实现,程序员负责用。

package xin.wangjinlong.test;

import xin.wangjinlong.anno.Vip;
import xin.wangjinlong.beans.Admin;

public class test03 {
    public static void main(String[] args) {
        Class clz = Admin.class;
        Vip annotation = (Vip)clz.getAnnotation(Vip.class);
        if(annotation != null){
            if("true".equals(annotation.value())){
                System.out.println("你是VIP");
            }else{
                System.out.println("你不是VIP");
            }
        }
    }
}

从上面的例子中推断出JavaWeb开发中@WebServlet 注解的实现方式

1,获取到request中的请求行,得到用户请求的资源路径

2,用上一步中获得的资源路径与@WebServlet中的value值对比,相同的话就执行该注解的方法

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值