这几天在学习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. C#的显式接口和隐式接口(转载)

    接口的实现分为:隐式实现和显式实现.如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现.显示实现是通过使用接口的完全限定名来实现接口成员 ...

  2. C# winform 按钮设置左边图标

    按钮设置操作如下: 1.先设置按钮图标,再设置图标的对齐方式 2.再设置按钮字体的对齐方式. 3.最后设置排列: TextImageRelation:设置为ImageBeforeText

  3. SQL Server @@ERROR 用法

    @@error是系统函数,当没有发生错误时返回0,如果发生错误时@@error<>0,并返回错误号,每个SQL语句执行完,@@error值都会变. @@error只记录当前错误,如果存储过 ...

  4. 将 Callout 容器添加到移动设备应用程序中

    在移动设备应用程序中,callout 是在应用程序顶部弹出的容器.该容器可以容纳一个或多个组件,并且支持不同类型的布局. callout 容器可以是模态或非模态容器.模态容器在其关闭之前接受所有的键盘 ...

  5. Google中Gson的使用解析json数据-------学习篇

    之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...

  6. KB奇遇记(5):奇葩的用人制度

    8月份入职,公司不给我们正式任命,导致了我们开展工作困难重重,基本上很少有人会鸟你,做事仿佛名不正言不顺.哪怕你是未来信息部的老大也一样,网管们根本不买你的账.所以做ERP选型,做旧OA的选型以及加密 ...

  7. Webservice_常用

    官网示例: http://cxf.apache.org/docs/writing-a-service-with-spring.html http://cxf.apache.org/docs/jax-r ...

  8. FZU 2167 大王叫我来巡山呐

    Problem 2167 大王叫我来巡山呐 Accept: 931    Submit: 1405Time Limit: 1000 mSec    Memory Limit : 32768 KB Pr ...

  9. phpcms 替换首页

    利用phpcms制作企业站,首先要将静态的企业主页替换成后台可编辑的动态主页. 首先做一个静态的企业站主页: <!DOCTYPE html> <html> <head&g ...

  10. JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法

    前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学 ...