注解

来源:互联网 发布:ubuntu双系统安装教程 编辑:程序博客网 时间:2024/05/19 19:58

1.什么是注解?

1. jdk1.5之后出现的,不是注释。 2. 注释是程序员写的,程序员看注释帮助理解程序代码。  注解是给程序看的。描述程序如何运行的以及在什么阶段运行的。(源代码阶段,编译阶段,运行阶段)3. 注解相当于一种标记,看见一个注解就知道要做什么事。在程序中使用反射来解释注解是干什么的。4. 注解可以添加类,包,变量,方法等等上  (@Test给方法添加注解)

2.注解的作用?

2.1 编写文档。2.2 代码分析(使用反射来解释注解)2.3 编译检查(@Override)进行基本的编译检查。

3.常见的注解?
3.1 @Override 重写(父类与子类之间的关系) 额外:@Overload重载(体现的多态性)
3.2 @Deprecated 类或者方法已经过时
3.3 @SupperWarings 排除相关警告

4.注解的声明

声明的注解格式: 注解的关键字 @interface

@Retention@Target访问权限  @interface  注解名{   可以声明的类型有    基本类型,String,枚举类型,Class类型,   示例: public String name();}查看注解的本质: 首先反编译class文件  ,执行命令javap -c  class文件结果:Compiled from "MyAnnotation.java"public interface com.sky.anntotation.MyAnnotation extends java.lang.annotation.Annotation {}本质是一个接口,父类是Annotation.

备注:一个注解必须声明在什么阶段可用,以及可以用在什么地方。

5.注解的相关方法

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)  判断指定filed或者method或者类等等。。。上是否有指定的注解public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)  获取指定filed或者method或者类等上的指定注解 public Annotation[] getAnnotations() :获取指定filed或者method或者类等上的所有注解

6.注解的分类(4个)

5.1@Retention该注解可以运行在那个阶段(值:SOURCE,CLASS,RUNTIME)        5.1.1 SOURCE:表示注解只在源代码阶段有用,在编译阶段之后直接抛弃。        5.1.2 CLASS:注解在class中可以用,但是在vm中被抛弃。        5.1.3 RUNTIME:在VM运行阶段保留注解。因此通过反射读取注解的信息。5.2@Target表示该注解可以用在什么地方(构造方法,局部变量,方法,包,参数等等。。。。)5.3 @Documented 将注解包含到doc中       执行命令(切换目录到指定类的位置): javadoc -d doc  类名.java    (该类中使用了注解)5.4 @Inerited  允许子类可以继承父类的注解

7.反射和注解的关系?

解释: 如果注解要具有一定意义的功能,必须使用反射来解析,给指定注解注入不同的功能。1. 如果某一个注解具有赋值功能,肯定是反射获取到指定变量,调用了f.set(obj,value)去赋值。2. 如果是某个方法具有一定功能,肯定是反射获取到指定方法,调用method.invoke(obj,obj)进行方法调用    1和2做法基本都是框架完成,已经封装好,所以咱们第三阶段使用注解直接用了  例如:  @transactionManager    数据库框架阶段直接使用注解就完成了事务处理。      大公司框架都是自己封装的。小公司直接用大公司发布的开源的,复制粘帖。

7.tomcat中servlet,filter,listener三个使用注解如何完成?
servlet规范中2.5之前使用web.xml进行注册
servlet3.0之后直接使用注解自动注册,不需要web.xml

  Serlvet注解注册:         方式一:@WebServlet("/aa")  servlet一个映射地址        方式二:@WebServlet(name="ServletDemo01",urlPatterns={"/cc","/bb"})                    servlet多个映射地址    Listener注解注册:@WebListener    Filter注解注册:@WebFilter("/*")使用注解注册:      优点:开发效率高(代码少)      缺点:硬编码(修改困难)使用web.xml注册:      优点:可配置,解耦合      缺点:不直观,效率低