Spring常用注解以及含义
    ResponseBody:作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
    service:用于标注业务层组件,被标注的类将自动实例化注册到Spring容器
    Controller:使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作。
    companent:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
    RequestMapping:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    Repository:用来表示持久层,注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作),并支持自动处理数据库操作产生的异常
    Autowired:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法
    PathVariable: 可以将 URL 中占位符参数绑定到控制器处理方法的入参中
    requestParam:可以将URL中的参数绑定到处理函数方法的变量中
    Qualifier:标识用来注入特定的Bean实例

自定义注解
    实现
        Retention:用于描述注解的生命周期(即:被描述的注解在什么范围内有效)SOURCE在源文件中有效(即源文件保留),CLASS在 class 文件中有效(即 class 保留)。RUNTIME在运行时有效(即运行时保留)。
        Docuemnt:在默认的情况下javadoc命令不会将我们的annotation生成再doc中去的,所以使用该标记就是告诉jdk让它也将annotation生成到doc中去
        Inherited:比如有一个类A,在他上面有一某个注解,那么A的子类B不用再次标该注解就可以使用
        Target:用于描述注解的使用范围(CONSTRUCTOR用于描述构造器,FIELD用于描述域,LOCAL_VARIABLE用于描述局部变量,METHOD用于描述方法,PACKAGE用于描述包,PARAMETER用于描述参数,TYPE用于描述类或接口(甚至 enum )。)
    自定义注解的注意事项:
        注解是不可以继承其他接口的
        注解存在包结构的,在使用的时候直接进行导入即可
        注解中的数据类型只支持: 基本类型、数组类型、枚举类型 。其他的类型或者用户自定义的类都是不可以作为注解的类型
    使用的场景
        日志
Spring的通知类型
    前置通知
    后置通知
    返回通知
    异常通知
    环绕通知