Java Annotation Overview详解_java

JAVA注解概述:

1. 注解是给编译器看的,这不同于注释

2. 三个基本的注解:

@Override  告诉编译器这是在覆写方法
@Deprecated 告诉编译器该方法过时了
@SuppressWarnings("unchecked")  不要警告
= (value={"unchecked"})
3. 注解可以用来替代传统的配置文件
4. JDK5 开始,Java增加了对元数据(MetaData)的支持,即Annotation。

自定义注解和反射注解

自定义注解:
1. 新建annotation:(比接口的定义只多了个@符号)

复制代码 代码如下:

public @interface myAnnotation { 
    //属性 
    String who(); 
    int age(); 
    String gender(); 

2. 设置带默认值的注解

复制代码 代码如下:

public @interface YouAnnotation { 
    String who() default "tom"; 
    int age() default 0; 
    String gender() default "female"; 

3. 数组情况

复制代码 代码如下:

public @interface TheyAnnotation { 
    String[] value(); //一定要有() 

元Annotation / MetaAnnotation
用来修饰Annotation的。(可以查看@Override的源代码)

@Retention 注解策略,用于指定该Annotation可以保留的域
RetentionPolicy.CLASS
在字节码级别有,在运行级别不可见(默认)
RetentionPolicy.RUNTIME
三个层级均可见,运行时可以反射
RetentionPolicy.SOURCE  只在源码级别上可用,在字节码级别不可见

@Target  指定注解可以被用在哪些范围上
@Documented 写入文档,在使用javadoc命令写入html文档时,该注解一同被写入
@Inherited  可继承性,继承该类的子类依然具有父类该注解的特性

ex.反射注解的方式执行连接数据库操作:

定义注解如下:

复制代码 代码如下:

//让一个注解可以在运行时可以被反射 
@Retention(RetentionPolicy.RUNTIME) 
public @interface DbInfo { 
    String driver() default "com.mysql.jdbc.Driver"; 
    String url() default "url = jdbc:mysql://localhost:3306/academic"; 
    String password() default "1234"; 
    String username() default "root"; 

反射注解:

复制代码 代码如下:

@DbInfo 
public static Connection getConnection() throws Exception{ 
    //取得该类的字节码 
    Class clazz = Demo2.class; 
    //取得该类中名为getConnection()的公共方法 
    //参数1:方法名 
    //参数2:方法类型参数对应的字节码对象,没有的话,即null 
    Method method = clazz.getMethod("getConnection", null); 
    //通过该方法,取得该方法上定义的注解 
    DbInfo dbInfo = method.getAnnotation(DbInfo.class); 
    String driver = dbInfo.driver(); 
    String url = dbInfo.url(); 
    String user = dbInfo.username(); 
    String password = dbInfo.password(); 

    Class.forName(driver); 
    return DriverManager.getConnection(url, user, password); 

时间: 2024-10-21 17:41:07

Java Annotation Overview详解_java的相关文章

Java观察者设计模式详解_java

   观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实现事件处理系统.   观察者模式(Observer)完美的将观察者和被观察的对象分离开.举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察

Java反射机制详解_java

本文较为详细的分析了Java反射机制.分享给大家供大家参考,具体如下: 一.预先需要掌握的知识(java虚拟机) java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 1.这个类型的全

Java并发控制机制详解_java

在一般性开发中,笔者经常看到很多同学在对待java并发开发模型中只会使用一些基础的方法.比如Volatile,synchronized.像Lock和atomic这类高级并发包很多人并不经常使用.我想大部分原因都是来之于对原理的不属性导致的.在繁忙的开发工作中,又有谁会很准确的把握和使用正确的并发模型呢? 所以最近基于这个思想,本人打算把并发控制机制这部分整理成一篇文章.既是对自己掌握知识的一个回忆,也是希望这篇讲到的类容能帮助到大部分开发者.  并行程序开发不可避免地要涉及多线程.多任务的协作和

Java 线程池详解_java

系统启动一个线程的成本是比较高的,因为它涉及到与操作系统的交互,使用线程池的好处是提高性能,当系统中包含大量并发的线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过次数. 一.Executors 工厂类用来产生线程池,该工厂类包含以下几个静态工厂方法来创建对应的线程池.创建的线程池是一个ExecutorService对象,使用该对象的submit方法或者是execute方法执行相应的Runnable或者是Callable任务.线程池本身在不

Java命令设计模式详解_java

将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化.分离变化与不变的因素. 一.角色Command 定义命令的接口,声明执行的方法.ConcreteCommand 命令接口实现对象,是"虚"的实现:通常会持有接收者,并调用接收者的功能来完成命令要执行的操作.Receiver 接收者,真正执行命令的对象.任何类都可能成为一个接收者,只要它能够实现命令要

Java建造者设计模式详解_java

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同的表示时. 通用类图: 举例:我们生活当中有许多设备都是以组装的形式存在的,例如台式电脑,那么有些厂商就会推出一些具有默认配置的组装电脑主机(这里可以用到模板方法模式来实现),顾客可以购买默认配置的产品,也可以要求厂商重新组装一部不同配置不同组装方式的主机.此时,我们就可以使

Java实例化类详解_java

Java 中实例化类的动作,你是否还是一成不变 new 对应对象呢?     经手的项目多了,代码编写量自然会增加,渐渐的会对设计模式产生感觉.     怎样使书写出来的类实例化动作,高内聚,低耦合,又兼具一定的扩展能力呢?     本文试图从几段鲜活的代码入手,给大家呈现不一样的 Java 实例化类.     下面代码取自 com.google.zxing 源码实现: public BitMatrix encode(String contents, BarcodeFormat format,

java synchronized用法详解_java

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块.

Java线程通信详解_java

线程通信用来保证线程协调运行,一般在做线程同步的时候才需要考虑线程通信的问题. 1.传统的线程通信 通常利用Objeclt类提供的三个方法: wait() 导致当前线程等待,并释放该同步监视器的锁定,直到其它线程调用该同步监视器的notify()或者notifyAll()方法唤醒线程. notify(),唤醒在此同步监视器上等待的线程,如果有多个会任意选择一个唤醒 notifyAll() 唤醒在此同步监视器上等待的所有线程,这些线程通过调度竞争资源后,某个线程获取此同步监视器的锁,然后得以运行.