这几天在学习Spring3.x,发觉现在许多框架都用上了java注解功能,然后自己就对java注解这方面初步学习了一下。

首先,注解跟注释不是一个意思,也根本不是同一个事物。

注释就是我们平常平常中对代码作解释的,也就是常见的"//..........."和"/*..............*/",相信大家也很熟悉,这里就不多说了。

对于注解,可以说是一个非常有用的技术,何为注解,其实注解就是作为一种描述,是对代码的一种描述,并且是可以读取的,可以是在程序运行时写进文件的的一种对代码的描述。(个人理解)

我们平常在一些IDE(如Eclipse)编写代码过程中,可能会遇过一些代码有下波浪线或者是中间穿一条线的代码,会告诉你不提倡使用这个方法,说这个方法可能会在以后的版本中被淘汰之类的提示语,

其实这就是注解在帮助你。

因为在java5.0(jdk1.5)后,java默认内置了@Deprecated注解,他的存在就是上述的功能,除此之外还有还有@Override,@SuppressWarnings,至于其他两个的作用,大家就自己去探索啦。

注解的强大之处,就是我们可以自定义自己需要的注解!

首先,注解跟类,接口一样,都是一种类型

定义一个注解的用法跟定义接口差不多,区别是多了一个@:

@interface MyAnnotation{

String value() default "NULL";

}

这样就定义了一个属于你自己的注解了。

注解本身也是代码,当然也有注解可以描述注解。

这个读起来有点怪异,但是这个是一个重要的特征,注解的注解就是描述注解的作用范围,生存范围的。

对注解的描述有四种,包括:

@Target({ElementType.METHOD})//描述注解的作用范围,ElementType.METHOD是参数,表示只能作用于方法,例如

@MyAnnotation()  //这是错误的

public class AnnotataionTest{

@MyAnnotataion() //这是正确的

public void test(){

}

}

其余三种,作用如下:

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将被编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解

自定义注解又有什么用?怎么用呢? 

 对于注解的使用,我就使用自己编写的一个例子,有什么不好的地方大家轻拍- -#

首先,新建一个自定义注解

package my.annotation.i;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "NULL";
}

然后写一个测试注解的类

package my.annotation.impl;

import my.annotation.i.MyAnnotation;

public class AnnotationTest {
@MyAnnotation("This is method 1")
public String method1(String s){
System.out.println("method1 is invoked,params is "+s);
return s;
}
public String method2(String s){
System.out.println("method2 is invoked,params is "+s);
return s;
}
@MyAnnotation("This is method 3")
public String method3(String s){
System.out.println("method3 is invoked,params is "+s);
return s;
}
}

 最后写一个Client,注解就大显身手了

package my.annotation.client;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import my.annotation.i.MyAnnotation;
import my.annotation.impl.AnnotationTest;
public class Client {
public static void main(String[] args) throws Exception{
Class cs = Class.forName("my.annotation.impl.AnnotationTest");
Method[] methods = cs.getDeclaredMethods();
for(Method method:methods){
if(method.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation aTest = method.getAnnotation(MyAnnotation.class);
method.invoke(cs.newInstance(),aTest.value());
}
}
}
}

 输出如下:

method1 is invoked,params is This is method 1
method3 is invoked,params is This is method 3

这是我对java注解的初步了解,可能有什么错误的地方,大家谅解- -#

Java 注解 入门的更多相关文章

  1. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  2. java注解入门(含源码下载)

    注解(Annotation)是从jdk1.5开始增加的特性.学习注解能够读懂框架的代码:让编程更加简洁,代码更加清晰. 注解概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法. ...

  3. Java 注解入门实例 && 注解传參

    參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...

  4. Java 注解入门

    1.什么是注解 注解的语法: @注解名称; 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件; 注解是由框架来读取使用的; 所有的注解都是 Ann ...

  5. [2]注解(Annotation)-- 深入理解Java:注解(Annotation)自定义注解入门

    转载 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理解Java:注解(Annotation)自定义注解入门 要深入学习 ...

  6. 深入理解Java:注解(Annotation)自己定义注解入门

    深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...

  7. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  8. JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  9. java注解基础入门

    前言 这篇博客主要是对java注解相关的知识进行入门级的讲解,包括**,核心内容主要体现在对java注解的理解以及如何使用.希望通过写这篇博客的过程中让自己对java注解有更深入的理解,在工作中可以巧 ...

随机推荐

  1. Java经典案例之“水仙花数”

    /** * 描述:打印出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如: * 153=1^3+5^3+3^3等... * 分析:利用for循环控制100-99 ...

  2. Mac下使用Brew搭建PHP(LNMP/LAMP)开发环境

    Mac下搭建lamp开发环境很容易,有xampp和mamp现成的集成环境.但是集成环境对于经常需要自定义一些配置的开发者来说会非常麻烦,而且Mac本身自带apache和php,在brew的帮助下非常容 ...

  3. 专注手机端前端界面开发的ui组件和js组合

    frozenui一款腾讯开发的简化版Bootstrap,只用于手机端 http://frozenui.github.io/ https://github.com/frozenui/frozenui z ...

  4. HTML 5 服务器发送事件、Input 类型、表单元素、表单属性

    HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新. Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获取来自服务器 ...

  5. HTML5画布(CANVAS)速查简表

    HTML5画布(CANVAS)速查简表 http://www.webhek.com/misc/html5-canvas-cheat-sheet/

  6. node源码详解(二 )—— 运行机制 、整体流程

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource2 本博客同步在https://cnodejs.o ...

  7. Struts2标签--S:iterator----jsp页面遍历双层list

    双层遍历,第一层list为classes,里面放的是班级class对象,第二层为班级class里的小组groups.     <s:iterator value="classes&qu ...

  8. 在windows下安装运行disconf

    一.环境准备 1.下载disconf源码 (本文以2.6.36为例) https://github.com/knightliao/disconf 2.下载nginx1.10.2(windows版) h ...

  9. JavaScript中DOM的层次节点(一)

    DOM是针对HTML和XML文档的一个API,描绘了一个层次化的节点树,允许开发人员添加.修改.删除节点的一部分. DOM将HTML和XML文档描绘成一个有多个节点构成的结构,节点分为12种不同的节点 ...

  10. 关于a.b和a[b]的区别

    在写代码的过程中,我们经常可以看到a.b或啊a[b],但是他们有什么区别呢: 简单说一下吧,有自己的还用群友的大力支持! 在js的对象中 var arr = {a:"b",b:&q ...