博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-注解-1-注解快速入门
阅读量:4301 次
发布时间:2019-05-27

本文共 3101 字,大约阅读时间需要 10 分钟。

前面学习了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类。

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

注解的使用

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

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

注解不可以写在 导包语句前面(其实也可以,但是没啥用),还有不能写在调用方法语句前面。

public void fun1() {		@MyAnnotation		System.out.println("Hello");	}

注解的作用目标

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

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

 

注解的属性

定义属性

格式: 类型 名称();

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

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

定义属性就是这样格式。

使用注解属性

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

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}

 

转载地址:http://emxws.baihongyu.com/

你可能感兴趣的文章
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>