JavaWeb之“注解”

举报
Mr.Z事顺意 发表于 2023/02/28 17:50:45 2023/02/28
【摘要】 什么是注解从语法上来说,具备以下这种格式就是注解。@注解名称     例如Junit中的@Test以后在编程中看到@名称 就要想起这是一个注解。接下来看看注解有什么好处,也就是注解的作用。 注解的作用使用注解就是用来取代配置文件,就是这么一个作用。例如在Servlet3.0中,我们可以不再需要使用web.xml来配置Servler和Filter等配置,全部可以采用注解来实现,这时候注解就取代...

什么是注解

从语法上来说,具备以下这种格式就是注解。

@注解名称     例如Junit中的@Test

以后在编程中看到@名称 就要想起这是一个注解。接下来看看注解有什么好处,也就是注解的作用。

 

注解的作用

使用注解就是用来取代配置文件,就是这么一个作用。例如在Servlet3.0中,我们可以不再需要使用web.xml来配置Servler和Filter等配置,全部可以采用注解来实现,这时候注解就取代了xml配置文件。注解的核心作用就是起到配置作用,配置包含定义和读取。

 

注解是由框架来读取和使用的

怎么来理解这个标题呢?第一小点,注解是有框架来定义的。例如Junit中@Test就是Junit框架来定义。第二小点,注解是由框架来解析和使用,还是Junit中,@Test表示以下方法是一个测试用例,这个是Junit来解析出来。

或者,拿我们java web动态项目中的web.xml,之前我们没有学习注解,我们Servlet和Filter都在web.xml中写入配置。这些配置都是框架来使用和读取,这里的框架,就是我们的web服务器,也就是tomcat。如果我们在web.xml中写入了错误的配置,tomcat在启动过程中读取到web.xml中存在错误,就会报错。

 

注解的使用

我们在学习和使用注解,可以从下面三点去着手。

    定义注解类
    使用注解
    读取注解

其实,注解也是一个类,我们在一个类中定义了注解,一般这个定义注解都是框架来实现。然后开发人员只需要学会使用注解,一般常用的注解是需要掌握基本使用,然后再由框架解析和读取注解。

 

注解的定义举例

下来来用代码实现一个定义注解的过程。定义注解不能使用class,enum和interface,而是使用@interface

创建一个java 项目,在一个包下新建一个Demo1.java类。

public class Demo1 {
	
}
 
/**
 * 定义注解
 * @author Anthony
 *
 */
@interface MyAnnotation{
	
}

注解的使用

下面注解可以写在成员变量,方法参数,构造方法,类,方法的前面。

@MyAnnotation
public class Demo1 {
	@MyAnnotation
	private String name;
	
	@MyAnnotation
	public void fun1() {
		
	}
	
	public void fun2(@MyAnnotation String name) {
		@MyAnnotation
		String nickName = "hello";
	}
}
 
/**
 * 定义注解
 * @author Anthony
 *
 */
@interface MyAnnotation{
	
}

注解的作用目标

通过上面的注解使用代码练习,这里来总结下注解的作用目标

    类(接口和枚举)
    方法
    构造器
    局部变量
    参数
    包(没啥用)

 

注解的属性

定义属性

格式: 类型 名称();

类型就是我们Java中熟悉的八大数据类型,名称就是熟悉别名,注意后面跟着一对小括号。小括号一定要有,不然会报错,小括号里也不能写参数。下面来看看代码中如何定义一个注解属性。

使用注解属性

下面来解释使用注解的时候,需要给属性赋值。定义了多少个就需要几个赋值,不然会报错。

    package annotation;
     
    @MyAnnotation(name="tom", age=18)
    public class Demo1 {

    }

    /**
     * 定义注解
     * @author Anthony
     *
     */
    @interface MyAnnotation{
        String name();
        int age();
    }

属性写在小括号内,多个属性逗号隔开。如果学习过TestNG或者Junit的人,就明白这个属性赋值的作用。


注解属性的默认值

前面我们定义了name和age两个属性,也学会了使用注解属性赋值。有时候,注解属性是需要默认值,这个就需要在定义属性的时候提供默认值。

    package annotation;
     
    @MyAnnotation(name="tom")
    public class Demo1 {
        
    }
     
    /**
     * 定义注解
     * @author Anthony
     *
     */
    @interface MyAnnotation{
        String name();
        int age() default 18;
    }
     

直接在定义属性的时候使用default后面跟着默认值。上面使用注解的时候,小括号里不写age属性赋值就表示使用默认值。

名为value的属性的特权

这是什么意思呢?如果你定义了一个属性,属性名称叫value, 当使用属性的时候,并且只给value赋值的时候,value=值1,可以简写成值1,这就是叫value的属性的特权。下面来代码演示下。

    package annotation;
     
    @MyAnnotation("tom")
    public class Demo1 {

    }
     
    /**
     * 定义注解
     * @author Anthony
     *
     */
    @interface MyAnnotation{
        String value();
        int age() default 18;
    }

这里因为age有默认值,所以赋值的时候不需要给出具体值去覆盖18,就剩下value一个属性需要设置值,@MyAnnotation("tom") 相当于@MyAnnotation(value="tom"),这里value的特权就是可以省略value=这个字符串。

注解属性的类型

前面注解属性我们知道有8中基本数据类型,还使用了Sting类型,其实还有其他类型。

    8中基本数据类型
    String
    Enum(枚举)
    Class
    注解类型
    以上类型的一维数组类型

下面看看这些类型的定义和使用赋值的代码。

    package annotation;
     
    @MyAnnotation(
            a = 100,
            b = "hello",
            c = MyEnum.A,
            d = String.class,
            e = @MyAnnotation2(),
            f = {"tom", "lisi"}
            
    )
    public class Demo1 {
    }
     
    /**
     * 定义注解
     * @author Anthony
     *
     */
    @interface MyAnnotation{
        int a();
        String b();
        MyEnum c();
        Class d();
        MyAnnotation2 e();
        String[] f();
    }
     
    @interface MyAnnotation2 {
        
    }
     
    enum MyEnum {
        A,B, C
    }

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。