框架基础——全面解析Java注解
为什么学习注解?
学习注解有什么好处?
学完能做什么?
答: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注解的更多相关文章
- Spring框架入门之基于Java注解配置bean
Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...
- 基础篇:深入解析JAVA注解机制
目录 java实现注解的底层原理和概念 五种元注解详解 使用动态代理机制处理注解 spring.AOP和注解机制 (题外)@FunctionalInterface原理介绍 欢迎指正文中错误 关注公众号 ...
- 全面解析java注解
一.注解概述 1.学习注解能够读懂别人的代码,特别是框架相关的代码 2.让自己的编程更加简洁,代码更加清晰 3.让别人高看一眼,会使用自定义注解来解决问题 ...
- 【iMooc】全面解析java注解
在慕课上学习了一个关于java注解的课程,下面是笔记以及一些源码. Annotation——注解 1.JDK中的注解 JDK中包括下面三种注解: @Override:标记注解(marker annot ...
- 《Java基础知识》Java注解"@"详解
Java注解含义: Java注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的.Java注解又叫java标注,java提供了一套机制,使得 ...
- 分享知识-快乐自己:全面解析 java注解实战指南
请你在看这篇文章时,不要感到枯燥,从头到尾一行行看,代码一行行读,你一定会有所收获的. 问: 为什么学习注解? 学习注解有什么好处? 学完能做什么? 答: 1):能够读懂别人的代码,特别是框架相关的代 ...
- 想自己写框架?不了解Java注解机制可不行
无论是在JDK还是框架中,注解都是很重要的一部分,我们使用过很多注解,但是你有真正去了解过他的实现原理么?你有去自己写过注解么? 概念 注解(Annotation),也叫元数据.一种代码级别的说明.它 ...
- Spring基础篇——通过Java注解和XML配置装配bean
自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...
- java基础之:java注解
一:元注解 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1. ...
随机推荐
- mongodb 3.2 分片部署步骤
#linux 网络优化1. 文件中/etc/sysctl.conf, 加入net.core.somaxconn = 2048fs.file-max = 2000000fs.nr_open = 2000 ...
- HTML: margin詳解
margin:10px; 設置塊元素的上,右,下,左方向的值同爲10px margin:10px 30px; 設置塊元素的上和下爲10px,左和右爲30px; margin:10px 20px 30p ...
- 【转载】C内存分配
一.预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. ...
- Lazarus解决无法识别中文路径的方法
procedure TForm1.Button1Click(Sender: TObject); var FileN:string; begin if self.OpenDialog1.Execute ...
- 一 mybatis快速入门
什么是MyBatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBatis可以使用简 ...
- 图算法(一)——基本图算法(BFS,DFS及其应用)(1)
1)BFS 广度优先搜索:给定源节点s,生成广度优先搜索树广度优先搜索树中从节点s到节点v的简单路径对应的就是s到v的最短路径(边数最少的路径)广度优先:将已发现节点与未发现节点之间的边界(灰色节点) ...
- C# DateTime类型和时间戳 互相转换
/// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name=”timeStamp”></para ...
- js判断ie版本号
jQuery 2.0 去除了对浏览器版本号的判断(它推荐特性检测),这里是一个老外写的原生判断方法,这段代码着实巧妙!既简介.有向后兼容!一般做法都是:正则搜索 USER_AGENT :但因为历史原 ...
- 答CsdnBlogger问-关于职业发展和团队管理问题
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 问1:关于职业发展以及团队管理?(正能同學_) 请问在二线城市的小公司里,普通Android开发者的 ...
- 详解 Qt 线程间共享数据(用信号槽方式)
使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...