1、注解的概述:

注解是用来替代配置文件的!你回忆一下,我们以前总是要写一些配置文件,例如web.xml你还记得么?里面要写<servlet>和<servlet-mapping>!谁来读配置文件呢?当然是Tomcat!谁来写配置文件呢?当然是我们来写了!

在Servlet3.0中就可以使用使用注解来代替配置文件,开发者就不用再写配置文件了,而是写注解,然后Tomcat来读取注解。

注解也是类,需要定义了才能使用!

分别在Servlet3.0中有一个注解类为@WebServlet,然后我们就可以在Servlet中使用@WebServlet中使用这个注解了。这个注解就是用来替代<servlet>了。然后Tomcat会通过反射来读取注解中的信息!

小结:

  注解的语法:@注解名称

  注解的作用:替代xml配置文件!

2、Java中的注解:

  • @Overrid:作用在方法上的注解。当方法不是重写父类的方法时会报错;
  • @Deprecated:作用在方法上。标记该方法为作废方法(已过时);
  • @SuppressWarnings:作用在方法上,压制警告。



3、注解的使用:

  • 定义注解类:框架的工作
  • 使用注解:我们的工作
  • 读取注解(反射):框架的工作

4、定义注解类:

定义注解类不能使用class、enum,也不能使用interface,而是使用@interface

eg.   

public @interface MyAnn{}

5、使用注解的目标:

注解可以使用在类(接口或枚举)、属性、方法、构造器、包、参数、局部变量

eg.

package cn.ywq;

@MyAnn
public class MyClass {
@MyAnn
private int a;
@MyAnn
public MyClass() {}
@MyAnn
public void fun1() {}
@MyAnn
public void fun2(@MyAnn String s) {
@MyAnn
int n = 10;
}
}

6、注解的属性:

定义注解时,也可以给出属性。

public @interface MyAnn {
String value();
int value1();
}

其中value就是属性!你可能会说,它是一个方法!没错,它是一个方法,但我们非要称之为属性,因为把它当做属性更加好理解。

当为注解指定属性后,那么在使用注解时就必须要给属性赋值了:

@MyAnn(value1=100,value="hello")
public class MyClass {
}

注解的属性还可以有默认值,在使用注解时就可以不给带有默认值的属性赋值了。但没有给出默认值的属性还是要赋值的。

public @interface MyAnn {
String value() default "hello world";
int value1();
}
@MyAnn(value1=100)
public class MyClass {
}

在使用注解时,如果只给名为value的属性赋值,那么可以不给出属性的名称直接给出值。

public @interface MyAnn {
String value() default "hello world";
int value1() default 100;
}
@MyAnn()
public class MyClass {
}
@MyAnn(value="hello")
public class MyClass {
}
@MyAnn(value1=200)
public class MyClass {
}
@MyAnn(value="hello",value1=200)
public class MyClass {
}
@MyAnn("hello annocation")
public class MyClass {
}
@MyAnn(300)
public class MyClass {
}
@MyAnn("hello",value1=200)
public class MyClass {
}
  • 注解的属性后面要有一对圆括号,而且圆括号内不能给出东西。就像是无参的方法一样;
  • 注解的属性类型只能是:基本类型、String、Enum、Class、注解类型、以上类型的一维数组类型;
  • 注解的属性可以有默认值,例如:int a() default 100;
  • 数组的属性默认值:int[] arr() default {1,2,3},这里不能使用new int[]{1,2,3}
  • 使用注解时,在给数组属性赋值时的格式:@MyAnn(arr={1,2,3});

注解属性的类型

    > 8种基本类型

    > String

    > Enum

    > Class

    > 注解类型

    > 以上类型的一维数组类型





    当给数组类型的属性赋值时,若数组元素的个数为1时,可以省略大括号。

eg

@MyAnno1(   //相当于一个注解对象
a=100,
b="hello",
c=MyEnum1.A,
d=String.class,
e=@MyAnno2(aa=200, bb="world"), 所以此处e也得是一个注解对象
f=100 //省略了大括号
)
public class Demo3 { } @interface MyAnno1 {
int a();
String b();
MyEnum1 c();
Class d();
MyAnno2 e();
int[] f();
}
@interface MyAnno2{
int aa();
String bb();
}

7、注解的作用目标:

在定义注解时可以限制注解的作用目录!例如让注解只能作用在类和方法上。

这需要使用元注解:@Target。该注解有一个属性value,类型为ElementType[],它是枚举类型。

Target注解的源码如下:

public @interface Target {
ElementType[] value();
}
public enum ElementType {
TYPE,FIELD,METHOD,PARAMETED,CONSTRUCTOR,LOCAL_VARIABLE,ANNOCATION_TYPE,PACKAGE
}

在定义注解时,可以使用@Target注解来限制注解的作用目标:

@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnn {
}

这样MyAnn就只能作用在类和方法上的!其中ElementType.TYPE表示类和接口。

@MyAnn()
public class MyClass {
@MyAnn() //报错
private int a; @MyAnn()
public void fun() {}
}

8、注解的保留策略:

  • 注解的保留策略是指,注解是只保留在源代码上,还是保留到class文件上,再或者是类在运行时,可以被类加载器加载到内存中。
  • 如果希望注解被反射,那么注解就要保留到运行时,而不是源代码或类文件上。
  • 指定注解的保留策略需要使用元注解@Retention,它有一个value属性,类型为RetentionPolicy类型,RetentionPolicy是枚举类型:
public @interface Retention {
RetentionPolicy value();
}
public enum RetentionPolicy {
SOURCE, CLASS, RUNTIME
}

下面代码是指定注解保留到运行时

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnn {
String value() default "hello";
int value1() default 100;
}

Java基础—注解的使用的更多相关文章

  1. Java基础—注解(转载)

    概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...

  2. java基础-注解Annotation原理和用法

    在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...

  3. Java基础——注解

    一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...

  4. Java基础--注解Annotation

    Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...

  5. java基础—注解annotation

    一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...

  6. Java 基础 —— 注解

    注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...

  7. Java基础--注解、反射

    一.注解(Annotation) 1.什么是注解? 从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行 ...

  8. Java 基础 —— 注解 Annotation

    简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...

  9. Java基础 - 注解详解

    What - 什么是注解?        Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...

随机推荐

  1. hbase搭建web项目 报500错误 HTTP Status 500 - Unable to compile class for JSP

    在昨天,用hbase做后台搭建web项目时,前边的进行的非常顺利,当运行时便 报错了,截图如下: 这是直接在jsp中接收参数报的错误,如果在servlet中,同样也是报500的错误,虽然显示的不太一样 ...

  2. 简单选择排序实现(Java)

    简单选择排序实现 简单选择排序就是通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i (1 ≤ i ≤ n)个记录交换. 代码实现: public class Selec ...

  3. C语言 for循环之阶乘的算法

    int n; scanf("%d", &n); int fact = 1; int i = 1; while ( i <= n ) { fact *=i; i++; ...

  4. mysql 执行 sql 语句提示Parameter '@XXX' must be defined

    执行 sql 语句 MySqlException: Parameter '@maxNo' must be defined. 执行 sql 中含有自定义变量 @maxNo,抛出异常 解决方法: 连接字符 ...

  5. Java序列化接口Serializable接口的作用总结

    一.Java序列化接口Serializable的作用: 一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字 ...

  6. java文件上传-使用apache-fileupload组件

    目前文件上传的(框架)组件:Apache----fileupload .Orialiy – COS – 2008() .Jsp-smart-upload – 200M. 用fileupload上传文件 ...

  7. LNMT(Linux+Nginx+MySQL+Tomcat)常见性能参数调优

  8. Redis笔记(二):Redis数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...

  9. jetty9优化的两处地方

    http://www.cnblogs.com/LBSer/p/3637387.html jetty 9两个优化: https://webtide.intalio.com/2013/01/jetty-9 ...

  10. yum命令速查

    1 yum的基本原理 CentOS可在yum服务器上下载官方网站给出的rpm给出的表头列表数据,该数据除了记载每个rpm软件的相依性之外,也说明了rpm所放置的容器(repository)所在.通过分 ...