相对于注释这种给程序员看的信息;

注解,就是给程序看的解释性的语言,其作用就相当于配置文件的存在。其存在的意义在于以下几点:

优点:

  • 方便的使程序员看到相关项的关联位置及关联方式等信息。

    缺点:

  • 由于注解是存在于程序之上的,所以每次对注解进行修改后就必须要对源代码进行重新编译才会生效。


注解都长什么样呢?


在使用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

总结


使用自定义的注解技术,我们可以简化开发过程中来回切换任务,也可以较好的对代码进行相关项的维护,方便的处理业务逻辑。但是不容置疑的是其做完修改后要对源代码进行编译,这在一定程度上限制了注解的使用。

最新文章

  1. myeclipse如何设置字体?
  2. 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解
  3. 【Flask】Flask快速玩框架
  4. Google Chrome中的高性能网络 (三)
  5. 专题一、ArrayList增删操作技术细节详解
  6. Children’s Queue HDU 1297 递推+大数
  7. Oracle数据库之序列
  8. ASP .Net Core 使用 Dapper 轻型ORM框架
  9. thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
  10. 使用fiddler模拟重复请求接口
  11. Java Web之JSP
  12. T5557 读写卡详解
  13. PL/SQL Developer显示中文乱码
  14. Mac OS X各版本号的历史费用和升级关系
  15. [hadoop]hadoop2.6完全分布式环境搭建
  16. C++内联函数详解
  17. 蚂蚁社招Java-第四轮电话面试【技术终面】
  18. 3.1.7. Cross validation of time series data
  19. Zookeeper -- 本地\完全分布式 搭建
  20. JS刷新页面后滚动条的位置不变

热门文章

  1. 二叉树的基本操作(含Huffman树)
  2. Angular 和 Vue 使用的对比总结 -- 脚手架
  3. 剖析Vue原理&实现双向绑定MVVM
  4. 初识Redis系列之一:简单介绍
  5. [原创]基于VueJs的前后端分离框架搭建之完全攻略
  6. JDBC:从原理到应用
  7. Linux shell查询ip归属地
  8. Node.js Domain 模块
  9. Docker环境 ELK 快速部署
  10. Tomcat中的c3p0数据库连接池的释放