Java --Annotation学习心得体会及笔记
相对于注释这种给程序员看的信息;
注解,就是给程序看的解释性的语言,其作用就相当于配置文件的存在。其存在的意义在于以下几点:
优点:
方便的使程序员看到相关项的关联位置及关联方式等信息。
缺点:由于注解是存在于程序之上的,所以每次对注解进行修改后就必须要对源代码进行重新编译才会生效。
注解都长什么样呢?
在使用Eclipse编程的时候我们会经常看到下面几种:
- @Override——覆盖父类的方法
- @SupportWarning——抑制警告
- @Deprecated——过时的
大致的使用方法,我从网上download下来一幅图片,基本上可以讲述这些常用的注解的作用及使用方式。如下:
。
但是光有自带的这些注解可是远远不够滴。我们还需要开发出自定义的实现相关需求的注解。这样才能应付复杂的实际的开发环境。
怎么开发自定义注解?
开发一个自定义注解并不是很复杂,只要按照一定的约束和规范,就可以实现自定义的注解的开发。实现的步骤如下:
- 使用@interface关键字修饰注解名称
- 声明符合要求的属性及字段
- 使用元注解对自定义的注解进行约束和规范(尤其需要使用@Retention,来约束自定义注解的有效的Scope,一般是RetentionPolicy.RUNTIME这样我们才可以在代码编译完成及运行的时候捕捉到注解上面存在的数据信息)。
对于元注解一般有如下的几个:
- @Retention:可以通俗的理解为注解持有的域的范围
- @Target:理解为注解存在的位置
- @Document:加上这个注解的注解就会被收录到Javadoc工具上
- @Inherited:加上这个注解就会使得自定义的注解可以被继承
上面的元注解中最为常用也最为重要的是@Retention和@Target两个圆元注解,同样在网上下载了一张图,可以很好地解释相关项的含义及作用。
使用注解开发出一个数据库连接小助手注解
首先我们需要明白的是数据库连接需要的是驱动,资源定位,用户名和密码四个“属性”,所以我们的自定义注解就需要有这四个属性。如下:
package annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//这里是最为关键的一点,尤其需要注意注解的存在域的范围
@Retention(RetentionPolicy.RUNTIME)
public @interface JdbcAnnotation {
String driver();
String url();
String username();
String password();
}
然后我们就可以在程序中引用自定义的注解了。如下:
package annotation;
import java.lang.reflect.Method;
import java.sql.Connection;
import org.junit.Test;
public class JDBCUtils {
@JdbcAnnotation(driver="com.mysql.jdbc.Driver",url="jdbc:mysql://localhost:3306/myDb",username="root",password="mysql")
public static Connection getConnection() throws Exception {
Method method = JDBCUtils.class.getDeclaredMethod("getConnection", null);
JdbcAnnotation ja = method.getAnnotation(JdbcAnnotation.class);
String driver = ja.driver();
String url = ja.url();
String username = ja.username();
String password = ja.password();
System.out.println("数据库连接驱动:"+driver);
System.out.println("数据库连接资源定位:"+url);
System.out.println("数据库连接用户名:"+username);
System.out.println("数据库连接密码:"+password);
return null;
}
@Test
public void test() throws Exception {
getConnection();
}
}
实现的原理是:使用反射技术,获取注解信息,然后解析注解的内容并用相关的变量进行保存,然后就可以被其他的代码得到运用。比如调用实际开发中的数据库连接帮助类的相关方法,实现相关的业务逻辑。在这里仅仅是为了显示可以从注解上获得我们想要的信息,即可。
程序的运行结果如下所示:
数据库连接驱动:com.mysql.jdbc.Driver
数据库连接资源定位:jdbc:mysql://localhost:3306/myDb
数据库连接用户名:root
数据库连接密码:mysql
总结
使用自定义的注解技术,我们可以简化开发过程中来回切换任务,也可以较好的对代码进行相关项的维护,方便的处理业务逻辑。但是不容置疑的是其做完修改后要对源代码进行编译,这在一定程度上限制了注解的使用。
Java --Annotation学习心得体会及笔记的更多相关文章
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- Salty Fish 结对学习心得体会及创意照 (20165211 20165208)
小组结对学习心得体会及创意照 在阅读了软件工程讲义 3 两人合作(2) 要会做汉堡包和现代软件工程讲义 3 结对编程和两人合作后,加之对于这几周组队学习的感悟,我们对于组队学习的一些感悟和想法如下: ...
- 微信小程序js学习心得体会
微信小程序js学习心得体会 页面控制的bindtap和catchtap 用法,区别 <button id='123' data-userDate='100' bindtap='tabMessag ...
- java集合类学习心得
java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...
- Java基础学习心得笔记
对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变.面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做 ...
- Java开发学习心得(三):项目结构
[TOC] 3 项目结构 经过前面一系列学习,差不多对Java的开发过程有了一定的了解,为了能保持一个良好的项目结构,考虑到接下来要进行开发,还需要学习一下Java的项目结构 下面以两个项目结构为参照 ...
- java自学入门心得体会 0.1
之前记录了java的简介和基本语法 这里记载下对象和类 不太懂的我理解java对象和类的概念很模糊,因为有了 Abstract修饰符 让对象与类更加的扑朔迷离 - - 所以,就像很开放的语言,创建对象 ...
- 关于C#的学习心得体会
1·多看多写 多看网上成熟的demo,养成一个良好的代码编写习惯,将终生受益 2·多编多敲 看了代码,理解demo中的思路,灵活运用到自己的代码中,这样不仅了解了别人的代码,同时还了解了代码的执行过程 ...
随机推荐
- VM11 CentOS6.7 i386 安装 oracle 11g r2
CentOS 6.7 i386:最小桌面版本--中文1.网络配置 ifup eht0 vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改:NBOOT=ye ...
- Android绘制文字时垂直居中
canvas.drawText(String text, float x, float y, Paint paint); 是Android中绘制文本的方法,其中的x代表文字绘制时在X轴的起始点,而y是 ...
- Delphi 7连接MySql 5.5.15(转)
网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需.系统环境:Windows XP SP3软件环境:Delphi 7 .mysql-installer- ...
- c语言程序设计第四次作业——顺序结构
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
- jquery easyui datagrid 编辑行 类型combobox
完成编辑瞬间datagrid中显示的是combobox的value 而非text var rows=$('#tb1').datagrid('getRows'); for(var i=0;i<ro ...
- tomcat7+jdk的keytool生成证书 配置https
目前只会使用jdk的keytool来生成证书.本文仅介绍这种方法. 1Windows下: 1.1 生成keystore文件及导出证书 打开控制台: 运行: %JAVA_HOME%\bin\keytoo ...
- Ubuntu14.04安装 HP DeskJet GT 5820 打印机的方法
原创内容发表在 http://www.linuxdiyf.com/linux/25331.html 步骤就是: 这里(https://sourceforge.net/projects/hplip/fi ...
- Python学习---字符串处理
This world is but a canvas to our imagination. 世界只是我们的想象的画布. ----Apri 22 ''' 题目内容: "Pig Latin&q ...
- 编程英语之KNN算法
School of Computer Science The University of Adelaide Artificial Intelligence Assignment 2 Semes ...
- 独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
最近一年的工作,有很大的比重在做云平台的事情,简单来说,就是为公司内用户提供一个PaaS,用户可以在我们的云平台上方便的将单机服务程序扩展为多实例程序,以平台服务化的方式对外提供.在这里简单分享一下. ...