为什么学习注解?

学习注解有什么好处?

学完能做什么?

答:1. 能够读懂别人写的代码,特别是框架相关的代码;

  2. 让编程更加简洁,代码更加清晰;

  3. 让别人高看一眼。

spring、mybatis使用了大量的注解,会用注解不是目的,会使用自定义注解才是亮点。

java注解在java1.5版本引入。

一、概念

  Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。

二、Java中的常见注解

1、JDK自带注解

@Override 表示覆盖或重写父类的方法;

@Deprecated 表示该方法已经过时了。(当方法或是类上面有@Deprecated注解时,说明该方法或是类都已经过期不能再用,但不影响以前项目使用,提醒你新替代待的方法或是类。如果程序员不小心使用了它的元素,那么编译器会发出警告信息。

@SuppressWarnings 表示忽略指定警告,比如@Suppvisewarnings("Deprecation")

比如下面的例子:

person接口:

 public interface Person {
public String name(); public int age(); /*@Deprecated 表示该方法已经过时了*/
@Deprecated
public void sing();
/*注:
当方法或是类上面有@Deprecated注解时,
说明该方法或是类都已经过期不能再用,
但不影响以前项目使用,提醒你新替代待的方法或是类
*/
}

child实现类:

 public class Child implements Person {

     /*@Override 表示覆盖或重写父类的方法*/
@Override
public String name() {
// TODO Auto-generated method stub
return null;
} @Override
public int age() {
// TODO Auto-generated method stub
return 0;
} @Override
public void sing() {
// TODO Auto-generated method stub }

测试类:

 public class Test {
/*@SuppressWarnings 表示忽略指定警告,比如@Suppvisewarnings("Deprecation")*/
@SuppressWarnings("deprecation")
public void sing(){
Person p=new Child(); p.sing();
} }

2、第三方注解

具体示例如下:

Autowired将成员变量自动注入进来

三、注解的分类

按运行机制(注解存在于程序的那个阶段)将注解分为三类:源码注解(只在源码存在)、编译注解(在class文件中也存在)、运行时注解(在运行阶段仍然起作用)

按照来源来分的话,有如下三类:
1:JDK自带的注解(Java目前只内置了三种标准注解:@Override、@Deprecated、@SuppressWarnings,以及四种元注解:@Target、@Retention、@Documented、@Inherited)
2:第三方的注解——这一类注解是我们接触最多和作用最大的一类
3:自定义注解——也可以看作是我们编写的注解,其他的都是他人编写注解

按照功能来分的,还有,元注解——注解的注解。

四、自定义注解

1、自定义注解的语法要求

2、元注解

现在逐行分析:

@Target 是注解的作用域 :表示该注解可以用于一个类中的那些属性及方法上,如果作用域类型有多个用英文逗号分隔

下面是注解的作用域的列表:

@Retention:表示该注解的生命周期

注解按声明周期有个分类:

@Inherited:此注解是标识性的元注解,表示当前注解可以由子注解来继承

@Documented:表示生成javadoc的时候会包含注解

3、使用自定义注解

示例:

注解的定义看起来很像接口的定义,事实上,与其他任何Java接口一样,注解也将会编译成class文件。

定义注解时,会需要一些元注解(meta-annotation),如@Target和@Retention。@Target用来定义你的注解将用于什么地方(例如是一个方法或一个域)。@Retention用来定义该注解在哪一个级别可用,在源代码(SOURCE)、类文件中(CLASS)或者运行时(RUNTIME)。

4、解析注解

概念:通过反射获取类、函数或成员上运行时注解信息,从而实现动态控制程序运行的逻辑。

如:

使用forName()方法加载类,并使用getAnnotation(Description.class)检查该类是否带有@Description注解。

注解的继承只能作用在类上,方法上的注解不会被继承,Interface中的所有注解不会被继承。

五、注解的项目实战

具体示例:

Test测试类:

首先,考虑代码如何与数据库进行映射。

上面的Filter类与数据库表的结构非常相似。

对注解@Table 和@Column进行定义:

接下来考虑query()方法的实现:

运行结果:

此时需要对4.3部分改善一下:

运行结果:

改善后:

此时运行结果:

以上就基本完成了需求。

六、注解总结

看我们都学会了啥?

框架基础——全面解析Java注解的更多相关文章

  1. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

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

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

  3. 全面解析java注解

    一.注解概述       1.学习注解能够读懂别人的代码,特别是框架相关的代码       2.让自己的编程更加简洁,代码更加清晰       3.让别人高看一眼,会使用自定义注解来解决问题     ...

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

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

  5. 《Java基础知识》Java注解"@"详解

    Java注解含义: Java注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的.Java注解又叫java标注,java提供了一套机制,使得 ...

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

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

  7. 想自己写框架?不了解Java注解机制可不行

    无论是在JDK还是框架中,注解都是很重要的一部分,我们使用过很多注解,但是你有真正去了解过他的实现原理么?你有去自己写过注解么? 概念 注解(Annotation),也叫元数据.一种代码级别的说明.它 ...

  8. Spring基础篇——通过Java注解和XML配置装配bean

    自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...

  9. java基础之:java注解

    一:元注解 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1. ...

随机推荐

  1. LiveUpdate Adminstrator配置手册

    第一种模式: LUA 从Symantec官网LiveUpdate服务器下载更新. .登陆LUA控制台 图1 .添加Symantec Endpoint Protecton v11.0 图2 3. 查看源 ...

  2. 【新产品发布】EVC9001 USB 隔离器

     一. 简介 EVC9001采用Analog Device 公司的基于芯片级变压器的iCoupler 磁耦合隔离方案,完成了对USB接口双向隔离功能,隔离电压达 2500V(隔离电源模块 3000V隔 ...

  3. 【IOS笔记】Delegation

    Delegation Delegation is a simple and powerful pattern in which one object in a program acts on beha ...

  4. 放到u-boot/arch/arm/inlcude下面解压A20固件库制作笔记

    运行 build_dragonboard.sh,完成一次编译,首次编译需要消耗 20 分钟以上的时间.这里包括编译bootloader.kernel.rootfs. 修改 Linux 内核配置$ cd ...

  5. QT学习之-HelloWorld

    实现HelloWorld有2种方法. 第一种在mainwindow.ui直接添加Label且写上“HelloWorld”. 第二种是代码直接实现 #include "mainwindow.h ...

  6. Python For Data Analysis -- Pandas

    首先pandas的作者就是这本书的作者 对于Numpy,我们处理的对象是矩阵 pandas是基于numpy进行封装的,pandas的处理对象是二维表(tabular, spreadsheet-like ...

  7. SQL查询语句中的 limit offset(转 )

    经常用到在数据库中查询中间几条数据的需求 比如下面的sql语句: ① selete * from testtable limit 2,1; ② selete * from testtable limi ...

  8. Python中什么是set、更新、遍历set和set的特点

    dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的. 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的 ...

  9. extjs MVC模式的个人看法

    针对一个后台管理页面是mvc模式,后台也是mvc模式下的项目,要怎么去熟悉呢? 首先以我个人的认解,先从后台的管理界面来看,会有control,model,store,view:其中先看view的代码 ...

  10. BLE蓝牙通信指令交互过程配对与绑定

    最简单一次蓝牙通信需要以上相关步骤,包括discovery device,connect,pairing,bond等4个主要部分.BLE中主从机建立连接,到配对和绑定的过程如下图: