一、注解概述

      1、学习注解能够读懂别人的代码,特别是框架相关的代码
      2、让自己的编程更加简洁,代码更加清晰
      3、让别人高看一眼,会使用自定义注解来解决问题
      4、概念:Java提供了一种原程序中的元素关联任何信息的任何元数据的途径和方法
 
二、Java中的常见注解   Annotation
      1、JDK自带注解
            @Override
            @Deprecated   表示方法已经过时了,在方法上加一个中划线,
            @Suppvisewarnings  表示忽略警告
      2、常见第三方注解
           Spring:@Autowired
                   @Service
                   @Repository
           Mysbatis: @InsertProvider
                     @updateProvider
                     @Options
 
三、注解分类
      1、按运行机制分:
            源码注解: 注解只在源码中存在,编译成.class文件就不存在了。
            编译时注解:注解在源码和.class文件中都存在
            运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
       2、按来源分:
             JDK的注解
             第三方的注解
             自定义的注解
       3、元注解:注解的注解
四、自定义注解
       1、自定义注解的语法要求
                        
          成员类型是受限的,包括原始数据类型,String,Class,Annotation,Enumeration
          如果注解只有一个成员,则成员名必须取名为value(),在使用时可以胡磊成员名和赋值   号(=)
          注解可以没有成员,没有程员的注解称为标识注解
       2、元注解
             @Target 注解的作用域:构造方法、域、局部变量生命、方法、包、参数、类、接口
             @Retention  注解的生命周期:SOURCE、CLASS、RUNTIME
             @Inherited  允许子注解继承它
             @Documented  生成JavaDoc时包含注解的信息
       3、使用自定义注解
             使用注解的语法:
             @<注解名>(<成员名1>=<成员值1>,<>=<>,……)      
       4、解析注解
            通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑      
  1. //1.使用类加载器加载类
  2. Class c =Class.forName("要解析的类的全名");
  3. //2.找到类上面的注解
  4. boolean isExist = c.isAnnotationPresent(xxx.class);//xxx表示你要解析的注解的类名
  5. if(isExist){
  6. //3.拿到注解实例
  7. xxx d =(xxx)c.getAnnotation(xxx.class);
  8. System.out.println(d.value());
  9. }
  10. //4.找到方法上的注解
  11. Method[] ms = c.getMethod();
  12. for(Method m:ms){
  13. boolean isMExist = m.isAnnotationPresent(xxx.class);
  14. if(isMExist){
  15. xxx d =(xxx)m.getAnnotation(xxx.class);
  16. System.out.println(d.value());
  17. }
  18. //另一种解析方法
  19. for(Method m:ms){
  20. Annotation[] as = m.getAnnotation();
  21. for(Annotation a: as){
  22. if(a instanceOf xxx);
  23. xxx d =(xxx)a;
  24. System.out.println(d.value());
  25. }
  26. }
  27. }
 
五、在实际项目中使用自定义注解来解决问题
 
      如自己开发一个Hibernate     
 

全面解析java注解的更多相关文章

  1. 框架基础——全面解析Java注解

    为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...

  2. 【iMooc】全面解析java注解

    在慕课上学习了一个关于java注解的课程,下面是笔记以及一些源码. Annotation——注解 1.JDK中的注解 JDK中包括下面三种注解: @Override:标记注解(marker annot ...

  3. 基础篇:深入解析JAVA注解机制

    目录 java实现注解的底层原理和概念 五种元注解详解 使用动态代理机制处理注解 spring.AOP和注解机制 (题外)@FunctionalInterface原理介绍 欢迎指正文中错误 关注公众号 ...

  4. 分享知识-快乐自己:全面解析 java注解实战指南

    请你在看这篇文章时,不要感到枯燥,从头到尾一行行看,代码一行行读,你一定会有所收获的. 问: 为什么学习注解? 学习注解有什么好处? 学完能做什么? 答: 1):能够读懂别人的代码,特别是框架相关的代 ...

  5. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  6. Java注解教程:自定义注解示例,利用反射进行解析

    Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响.在这篇教程中,我们将学习Java注解,如何编写自定义注解,注解的使用,以及如何使用反射解析注解. 注解是Java 1.5引入 ...

  7. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  8. Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)

    该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解 ...

  9. java注解(Annotation)解析

    注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...

随机推荐

  1. mysql CMAKE 参数说明

    MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的.很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续 ...

  2. MySQL InnoDB存储引擎中的锁机制

    1.隔离级别 Read Uncommited(RU):这种隔离级别下,事务间完全不隔离,会产生脏读,可以读取未提交的记录,实际情况下不会使用. Read Committed (RC):仅能读取到已提交 ...

  3. Javascript 知识点简介

    如何在HTML中引入JS? 所有重定向的HTML标签内都可以嵌入javascript代码. 浮点数不要用 == 来进行判断 var num=0;    for(var i=0;i<10;i++) ...

  4. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.9

    (1). When $A$ is normal, the set $W(A)$ is the convex hull of the eigenvalues of $A$. For nonnormal ...

  5. 【管理工具】Kerberos简单应用

    Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者”系统设计上采用客户端/服务器结构与DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证.可以用于防止窃听 ...

  6. 浏览器插件 - 通用注入模版JS

    //TIP:先通过Tampermonkey编写为可用脚本,再套用此通用模版,再拖到Chrome安装为扩展即可. /* 通用注入原型3:*/ switch (window.location.pathna ...

  7. win7远程链接ubuntu 桌面版

    1.安装ubuntu 使用vagrant 添加了一个ubuntu12.04(xmanager好像只能控制最高这个版本,14.04没成功过) 2.安装xmanager 4 3.修改ubutu配置文件 s ...

  8. [GRYZ2015]阿Q的停车场

    题目描述 刚拿到驾照的KJ 总喜欢开着车到处兜风,玩完了再把车停到阿Q的停车场里,虽然她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是Kelukin.于是,她每次都把自己的爱车停在距 ...

  9. 命令cp

    cp 源 目标cp -r  递归复制整个目录cp -v  显示复制的详细信息

  10. openstack python sdk list tenants get token get servers

    1,openstack python sdk 获取token 获取租户tenants projects #!/bin/bash export OS_PROJECT_DOMAIN_ID=default ...