注解

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注册:
      优点:可配置,解耦合
      缺点:不直观,效率低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值