JavaWeb之“注解”
什么是注解
从语法上来说,具备以下这种格式就是注解。
@注解名称 例如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
}
- 点赞
- 收藏
- 关注作者
评论(0)