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

阅读目录

  • 一、概念
  • 二、Java中的常见注解
  • 三、注解的分类
  • 四、自定义注解
  • 五、注解的项目实战
  • 六、注解总结

为什么学习注解?

学习注解有什么好处?

学完能做什么?

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

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

  3. 让别人高看一眼。

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

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

回到顶部

一、概念

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

回到顶部

二、Java中的常见注解

 1、JDK自带注解

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

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

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

比如下面的例子:

person接口:

复制代码

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

复制代码

child实现类:

复制代码

 1 public class Child implements Person {
 2 
 3     /*@Override 表示覆盖或重写父类的方法*/
 4     @Override
 5     public String name() {
 6         // TODO Auto-generated method stub
 7         return null;
 8     }
 9 
10     
11     @Override
12     public int age() {
13         // TODO Auto-generated method stub
14         return 0;
15     }
16 
17     
18     @Override
19     public void sing() {
20         // TODO Auto-generated method stub
21 
22     }

复制代码

测试类:

复制代码

 1 public class Test {
 2     /*@SuppressWarnings 表示忽略指定警告,比如@Suppvisewarnings("Deprecation")*/
 3     @SuppressWarnings("deprecation")
 4     public void sing(){
 5         Person p=new Child();
 6         
 7         p.sing();
 8     }
 9     
10 }

复制代码

 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部分改善一下:

 

运行结果:

改善后:

此时运行结果:

以上就基本完成了需求。

回到顶部

六、注解总结

看我们都学会了啥?

 

 

-------------我是低调的分割线--------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CS231n Convolutional Neural Networks for Visual Recognition------Scipy and MatplotlibTutorial

源链接为:http://cs231n.github.io/python-numpy-tutorial/。 这篇指导书是由Justin Johnson编写的。 在这门课程中我们将使用Python语言完成所有变成任务!Python本身就是一种很棒的通用编程语言,但是在一些流行的库帮助下(numpy&…

Python之Numpy入门实战教程(1):基础篇

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库,今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。 强烈建议大家将本文中…

Go初识与问题

变量&常量 变量 命名 由字母、数字、下划线组成,首个字符不能是数字关键字、保留字不能作为变量名变量名字区分大小写驼峰命名声明 1. var : 全局变量var 变量名称 类型var 变量名称1,变量名称2 类型 (同一种类型)var (变量名称1 类型1变量名称2 类型…

1.3)深度学习笔记------浅层神经网络

目录 1)Neural Network Overview 2)Neural Network Representation 3)Computing a Neural Network’s Output(重点) 4)Vectorizing across multiple examples 5)Activation functions 6&a…

SpringMVC 的执行流程

SpringMVC 的执行流程 1)用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet捕获; 2)DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI&…

kafka初识

kafka中文文档 本文环境:ubuntu:18.04 kafka安装、配置与基本使用(单节点) 安装kafka 下载 0.10.0.1版本并解压缩 > tar -xzf kafka_2.11-0.10.0.1.tgz > cd kafka_2.11-0.10.0.1.tgzkafka简单配置 > vi config/server.properties主要注意三个地方&a…

1.4)深度学习笔记------深层神经网络

目录 1)Deep L-layer neural network 2)Forward Propagation in a Deep Network(重点) 3)Getting your matrix dimensions right 4)Building blocks of deep neural networks 5)Forward and Backward Propagation…

Struts1工作原理

Struts1工作原理图 1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面…

【洛谷 - P1772 】[ZJOI2006]物流运输(dp)

题干: 题目描述 物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在&am…

RabbitMQ初识

官方介绍 - 中文 本文环境:ubuntu:20.04 RabbitMQ安装、配置与基本使用 安装RabbitMQ # 简易脚本安装 curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash sudo apt-get install rabbitmq-server -y --f…

Apollo进阶课程 ⑦ | 高精地图的采集与生产

目录 1.高精地图采集过程中需要用到的传感器 1.1)GPS 1.2)IMU 1.3)轮速计 2.高精地图采集过程中的制图方案 2.1)方案一 激光雷达 2.2)Camera融合激光雷达 原文链接:Apollo进阶课程 ⑦ | 高精地图的采…

你看不懂的spring原理是因为不知道这几个概念

背景 问题从一杯咖啡开始。 今天我去楼下咖啡机买了一杯「粉黛拿铁」。制作过程中显示: 我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力。咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉…

EasyOcr 安装(linux、docker)、使用(gin、python)

EasyOcr git地址 EasyOCR是一款用python语言编写的OCR第三方库,同时支持GPU和CPU,目前已经支持超过70种语言. 安装(CPU) 注意: 本文是在仅在cpu下使用。如要使用CUDA版本,请在pytorch网站上选择正确的,并关闭此文章。…

Python之Numpy入门实战教程(2):进阶篇之线性代数

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库,今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。 本文主要介绍Numpy库…

【牛客 - 369F】小D的剑阵(最小割建图,二元关系建图,网络流最小割)

题干: 链接:https://ac.nowcoder.com/acm/contest/369/F 来源:牛客网 题目描述 现在你有 n 把灵剑,其中选择第i把灵剑会得到的 wiw_iwi​ 攻击力。 于此同时,还有q个约束,每个约束形如: …

【HDU - 3870】Catch the Theves(平面图转对偶图最短路,网络流最小割)

题干: A group of thieves is approaching a museum in the country of zjsxzy,now they are in city A,and the museum is in city B,where keeps many broken legs of zjsxzy.Luckily,GW learned the conspiracy when he is watching stars and told it to zjsxz…

Apollo进阶课程 ⑧ | 高精地图的格式规范

目录 高精地图规范格式分类 NDS格式规范 Open DRIVE格式规范 原文链接:Apollo进阶课程 ⑧ | 高精地图的格式规范 上周阿波君为大家详细介绍了「Apollo进阶课程⑦高精地图的采集与生产」。 高精地图采集过程中需要用到的传感器有GPS、IMU和轮速计。 无论是哪种传感…

Apollo进阶课程 ⑨ | 业界的高精地图产品

目录 高精地图的格式规范-OpenDRIVE HERE HD LIve Map HERE HD LIVE MAP-MAP COLLECTION HERE HD Live Map-Crowdsourced Update HERE HD Live Map-Learning HERE HD Live Map-Product MobileEye MobileEye-Pillars of Autonomous Driving MobileEye-Map as back-up s…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接:进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具(也可不下):高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…